Как я могу найти имена файлов журнала с ошибкой в ​​последней строке? - PullRequest
0 голосов
/ 03 ноября 2010

Я пытаюсь найти идентификаторы рабочих мест, которые заканчиваются ошибкой.

Когда я использую

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 ]

4 голосов
/ 03 ноября 2010

Вам нужен оператор if, чтобы вывести эхо-имя файла только после успешного выполнения grep:

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

Кроме того, перенаправьте результаты grep на /dev/null, чтобы они не отображались в выходных данных..

2 голосов
/ 03 ноября 2010

Вы хотите сказать

do tail -n 1 $i | grep error

не

do tail -n 1 *.log | grep error

В противном случае вы проверяете каждый файл журнала на каждой итерации и всегда получаете одинаковые результаты.

0 голосов
/ 03 ноября 2010

Ваша логика неверна. echo $ i будет содержать список файлов, а не вывод grep

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...