我试图遍历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不会反映在输出中。知道如何让它按预期工作吗?
答案 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
并且不会在最后一行反映出来。希望能帮助到你。