2010-11-03 50 views
0

我正在嘗試查找以錯誤結尾的作業的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提交作業

+0

請不要發表你的問題,並重復答案。這不是這個網站的工作方式。 – 2010-11-03 20:08:43

+0

我已將您的問題回滾到之前的狀態。沒有必要改變它,因爲每個人都可以清楚地看到下面接受的答案。 – Bobby 2010-11-03 20:56:53

回答

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所以它不會出現在輸出中。

+0

if語句不是嚴格要求的。考慮:對於我在* .log中;做尾巴-n 1「$ i」| grep -q error && echo $ i; done' – Sorpigal 2010-11-03 17:39:20

0

您的邏輯錯誤。 回聲$我將文件的列表,而不是grep的輸出

+0

我在查找發生錯誤的文件名 – 2010-11-03 16:50:50

2

你想說

do tail -n 1 $i | grep error 

do tail -n 1 *.log | grep error 

否則,你正在檢查在每次迭代每個日誌文件並將始終獲得相同的結果。

相關問題