如何检查文本文件中的所有条目是否都存在于pdf文件中?

时间:2016-06-08 09:44:05

标签: bash pdf text grep

我试图遍历allURLs.txt并检查该文件中的每个条目是否都存在于PDFtoCheck.pdf中。我知道一个名为pdfgrep的工具,但似乎无法应用它来满足我的目标。

#!/bin/bash

entriesMissing=0;

cat allURLs.txt | while read line
do
    # do something with $line here
    if [ ! -z echo `pdfgrep "$line" PDFtoCheck.pdf` ];
then
        echo "yay $line";

else
        echo "$line not found";
        entriesMissing=$[$entriesMissing+1];
fi

done

echo "DONE";
echo "There are $entriesMissing entries missing!";

尽管在allURLs.txt中放置了虚拟值,但是在allURLs.txt中但不在PDFtoCheck.pdf中的entires不会反映在输出中。知道如何让它按预期工作吗?

2 个答案:

答案 0 :(得分:1)

请注意,管道时会创建一个子shell:cat file | while。您应该使用文件重定向:while ... do; done < file

据我所知,pdfgrep支持-q安静标记,因此您只需在if语句中使用它。

entriesMissing=0
while IFS= read -r line; do
   if pdfgrep -q -- "$line" PDFtoCheck.pdf; then
     printf "Found '%s'\n" "$line"
   else
     printf "'%s' not found\n" "$line"
     ((entriesMissing++))
   fi
done < allURLs.txt

printf "There are %d entries missing\n" "%entriesMissing"

我还将增量更改为((... ++))

答案 1 :(得分:0)

将我的评论扩展为答案。我使用的-c选项也可以在pdfgrep中找到:

entriesMissing=0 
while read line 
do 
   # do something with $line here
   if [ $(grep -c "$line" b) -eq 0 ] 
   then 
      ((entriesMissing++)) 
      echo "$line not found"
   else 
      echo "yay $line"
   fi 
done < allURLs.txt

echo "DONE"
echo "There are $entriesMissing entries missing!";

我想在你的代码中指出,你在子shell(管道)中递增entriesMissing并且不会在最后一行反映出来。希望能帮助到你。