Сценарий оболочки + соответствие строк MAJOR и CRITICAL из файла журнала
Мне нужно сопоставить строки, которые имеют основные и критические строки
после слова ERROR:<любое целое число>
Посоветуйте, пожалуйста, как это сделать с помощью одной команды awk или sed?
more HW_Log.txt
CHK_HW ERROR:0 INFO self_monitor Verifying HW machine
CHK_HW ERROR:1 MAJOR self_monitor Verifying HW machine
CHK_HW ERROR:1 CRITICAL self_monitor Verifying HW machine
3 ответа
Решение
Это можно сделать с помощью grep
лайк:
$ grep "ERROR:[0-9]* \(CRITICAL\|MAJOR\)" /path/to/file
awk
команда:
awk '/ERROR\:[0-9]+[ \t]+(CRITICAL|MAJOR)/ {print}' path_to_file
sed
команда:
sed -ne '/ERROR\:[0-9]\+[ \t]\+\(CRITICAL\|MAJOR\)/p' path_to_file
awk
описание:
'/ERROR\:[0-9]+[ \t]+(CRITICAL|MAJOR)/ {print}'
^ ^
regexp command
- [0-9] + - одна или несколько цифр
- [\ t] + - один или несколько пробелов и табуляции
- (КРИТИЧЕСКИЙ | ОСНОВНОЙ) - "КРИТИЧЕСКИЙ" или "ОСНОВНОЙ"
- печать - печать строки
sed
описание:
-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression=script
add the script to the commands to be executed
'/ERROR\:[0-9]\+[ \t]\+\(CRITICAL\|MAJOR\)/p'
^ ^
regexp command
- [0-9] \ + - одна или несколько цифр
- [\ t] \ + - один или несколько пробелов и табуляции
- \(КРИТИЧЕСКИЙ \| ОСНОВНОЙ \) - "КРИТИЧЕСКИЙ" или "ОСНОВНОЙ"
- p - печатная строка
Еще один способ сделать это в awk:
awk '$2 ~ /^ERROR:[[:digit:]]+/ && $3 ~ /^(MAJOR|CRITICAL)/' HW_Log.txt
Он ищет строки только в указанных полях, поэтому игнорирует их, если они появляются в другом месте строки. Он использует стандартное поведение awk для печати совпавших строк (поэтому нет явного print
заявление). Это зависит от того, нет ли пробелов или табуляций в первых трех полях.