0

我想搜索许多 .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 文件。现在我想比较两个整数并仅在整数相同时打印文件名。

4

2 回答 2

2

只需通过 awk 传递它,例如:

| awk '$3==$NF'
于 2013-06-19T15:51:14.383 回答
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
于 2013-06-25T14:48:36.460 回答