如何在最后一行找到带有“错误”的日志文件的名称?

时间:2010-11-03 16:36:38

标签: bash grep

我试图找到以错误结束的工作的id。

当我使用

for i in *log
do tail -n 1 $i | grep error
echo $i
done

似乎在每个文件的最后一行发现错误,即使对于最后一行没有错误的文件,也会返回所有文件名

STOP fatal_error
out1.log
STOP fatal_error
out2.log
STOP fatal_error
out3.log
....

即使

grep error out1.log 

什么都不返回

或者,是否有更简单的方法来获取以错误结束的作业列表?我用qsub标记,因为我使用qsub提交作业

3 个答案:

答案 0 :(得分:4)

您需要一个if语句,以便只在grep成功时回显文件名:

for i in *.log
do  
    if tail -n 1 $i | grep error > /dev/null 
    then 
        echo $i
    fi  
done

此外,将grep结果重定向到/dev/null,以便它不会出现在输出中。

答案 1 :(得分:2)

你想说

do tail -n 1 $i | grep error

do tail -n 1 *.log | grep error

否则,您将在每次迭代时检查每个日志文件,并始终获得相同的结果。

答案 2 :(得分:0)

你的逻辑错误。 echo $ i将包含文件列表,而不是grep输出