捕获错误和管道进入awk

时间:2013-11-24 09:24:10

标签: awk pdftotext

我想捕获错误消息并发送到awk(例如,当pdf文件加密时,pdftotext会给出“密码不正确”消息),以便awk可以打印它。

因为它是下面的命令计算pdf文件中的单词。但是对于带密码的文件,命令返回0计数,与没有密码的pdf图像冲突(也返回0计数)。

pdftotext -q file.pdf - | awk 'BEGIN {w=w+NF; if(w>=30) {print (w-1); exit}} END {print w-1}'

我被困在

pdftotext 2>&1 file.pdf - | awk 'BEGIN {w=w+NF; if(w>=30) {print (w-1); exit}} END {print w-1}'

如果pdf文件受密码保护,则“命令行错误:密码不正确”会通过管道传输到awk。如何打印该短语? (在这种情况下,没有字数。)

一个。 DAS

2 个答案:

答案 0 :(得分:1)

要重新路由您想要将stderr重定向到stdout的错误。

使用

pdftotext -q file.pdf 2>&1 | awk '...' #Whatever post processing you do

答案 1 :(得分:1)

这似乎是你要求的:

pdftotext file.pdf - 2>&1 | awk '
    /Command Line Error:/ { print; exit}
    { w += NF }
    END { print w+0 }
'

你的主要问题似乎是你的整个脚本都在BEGIN部分内,并且在处理任何输入之前已经执行了。