2013-06-19 3 views
0

Я хочу найти много файлов .log для возникновения конкретной ошибки. Следующий код оболочки дает мне линию, я должен проверить для каждого .log файл, который гласит «прекращение Error» в последних 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-файлу. Теперь я хочу сравнить два целых числа и напечатать имя файла, только если целые числа совпадают.

+0

Можете ли вы разместить образец вашего файла журнала (последние несколько строк)? Слишком много трубопроводов продолжается ... –

ответ

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 
2

Просто передать его через AWK, как:

| awk '$3==$NF' 
+0

'awk $ 3 == $ NF'? –

+0

Да, ты прав. Исправлена. –

+0

Есть ли возможность вернуть только значение True или False этим кодом awk, как -q для grep? – tmartin

Смежные вопросы