Bash 从文本行中提取并比较整数

Bash 从文本行中提取并比较整数,bash,awk,grep,Bash,Awk,Grep,我要搜索多个.log文件以查找特定的错误发生。下面的shell代码给出了我必须检查的每一行.log文件,该文件在最后5行中声明了“错误终止”: for f in *.log; do tail -n 5 "$f" | grep -q "Error termination" && tac "$f" | grep -m 1 "Step number"; done 这将产生如下输出: Step number 40 out of a maximum of 216 Step nu

我要搜索多个.log文件以查找特定的错误发生。下面的shell代码给出了我必须检查的每一行.log文件,该文件在最后5行中声明了“错误终止”:

for f in *.log; do
  tail -n 5 "$f" | grep -q "Error termination" && tac "$f" | grep -m 1 "Step number"; 
done
这将产生如下输出:

Step number  40 out of a maximum of  216
Step number  17 out of a maximum of  192
Step number  25 out of a maximum of  216
Step number 192 out of a maximum of  192
Step number  21 out of a maximum of  200

每行对应一个.log文件。现在我想比较这两个整数,并且仅当整数相同时才打印文件名。

只需通过awk传递它,如:

| awk '$3==$NF'

下面这一行正是我想要的,尽管可能有一种更优雅的方式,使用更少的管道等等

for f in *.log ; do
  tail -n 5 "$f" | grep -q "Error termination" && tac "$f" | grep -m 1 "Step number" | grep -qo 'Step number \([0-9]*\) out of a maximum of  \1' && echo "$f";
done

您能发布日志文件的示例(最后几行)吗?太多的管道正在进行…是否有可能通过awk代码(如-q for grep)只返回真值或假值?当然。退出()。比如:
awk'$3==$NF{exit}{exit(1)}'
当我使用
|awk'$3==$NF{exit}{exit(1)}'和&echo“$f”
时,它只打印比
awk$3==NF
更多的行。有些文件甚至不包含“步骤号”。我是否误用了布尔值?