LINUX.ORG.RU

Обработка лог файла grep awk

 , ,


0

1

Есть лог файл вида:
03:01:29.317 info process [-,ea653d5aaa60ff72,ea653d5aaa60ff72,false\] PC1
05:22:42.211 info process [-,aw653d5aaa60ff72,aw653d5aaa60ff72,false\] PC2
05:22:42.302 info process [-,aw653d5aaa60ff72,aw653d5aaa60ff72,false\] acknowledge
06:09:32.083 info process [-,sd653d5aaa60ff72,sd653d5aaa60ff72,false\] PC5
05:12:32.759 ERROR process [-,sd653d5aaa60ff72,sd653d5aaa60ff72,false\] acknowledge
07:21:45.112 info process [-,45653d5aaa60ff72,45653d5aaa60ff72,false\] PC16
08:12:32.300 info process [-,31353d5aaa60ff72,ea653d5aaa60ff72,false\] PC1
09:25:41.000 ERROR process [-,31353d5aaa60ff72,ea653d5aaa60ff72,false\] acknowledge
06:09:35.083 info process [-,45653d5aaa60ff72,45653d5aaa60ff72,false\] acknowledge
03:01:25.714 info process [-,qa653d5aaa60ff72,qa653d5aaa60ff72,false\] PC1
05:12:32.308 info process [-,qa653d5aaa60ff72,qa653d5aaa60ff72,false\] acknowledge
05:12:32.309 ERROR process [-,ea653d5aaa60ff72,ea653d5aaa60ff72,false\] acknowledge
05:12:32.300 info process [-,98653d5aaa60ff72,98653d5aaa60ff72,false\] PC1
07:25:41.000 ERROR process [-,98653d5aaa60ff72,98653d5aaa60ff72,false\] acknowledge

Нужно отобрать сначала все записи по последнему полю, где например PC1 , с этих отобраных записей выбрать четвертое поле , которое в квадратных скобках, и потом снова пройти весь файл с поиском этих значенийкоторые в квадратных скобках были отобраны. А потом выбрать те у которых ERROR и соответствующую ему пару. предполагаемый вывод

03:01:29.317 info process [-,ea653d5aaa60ff72,ea653d5aaa60ff72,false\] PC1
05:12:32.309 ERROR process [-,ea653d5aaa60ff72,ea653d5aaa60ff72,false\] acknowledge
05:12:32.300 info process [-,98653d5aaa60ff72,98653d5aaa60ff72,false\] PC1
07:25:41.000 ERROR process [-,98653d5aaa60ff72,98653d5aaa60ff72,false\] acknowledge

спасибо..



Последнее исправление: laverka (всего исправлений: 1)

в job. пажалуйста.

anonymous
()
vars=$(grep "PC1$" < logfile | awk '{print $4}' | tr '\n' '|')
grep "ERROR" < logfile | grep -E $vars
aureliano15 ★★
()

Сорри, не обратил внимания на то, что кроме ERROR ещё и PC1 повторно выдать надо. Вот исправленный вариант:

vars=$(grep "PC1$" < logfile | awk '{print $4}' | tr '\n' '|')
grep -E "ERROR|PC1$" < logfile | grep -E $vars
aureliano15 ★★
()
Ответ на: комментарий от aureliano15

вы мой спаситель...спасибо огромное..

вы сделали то, чего не смог добиться на стековерфлоу в течении двух дней..а самому не получалось..разное перепробовал..наиболее близким вариантом было обработка awk и последующий греп..но не получалось передать нормально как поисковое слов. спасибо еще раз

laverka
() автор топика
Ответ на: комментарий от aureliano15

а можно еще попросить вас обьяснить что происходит?

первую строчку понимаю, мы выводим все поля с ключами и очищаем. далее с исходного файла выбираем где ERROR или PC1 и направляем в греп для проверки всех ключей? что значит тут «ERROR|PC1$» знак доллара после PC1?

laverka
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.