从文本行中提取和比较整数

时间:2013-06-19 15:45:53

标签: 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 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文件。现在我想比较两个整数并仅在整数相同的情况下打印文件名。

2 个答案:

答案 0 :(得分:2)

只需通过awk传递,例如:

| awk '$3==$NF'

答案 1 :(得分:0)

以下一行完全符合我的要求,但可能会有更优雅的方式,管道等更少。

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