Сценарий оболочки + соответствие строк 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 заявление). Это зависит от того, нет ли пробелов или табуляций в первых трех полях.

Другие вопросы по тегам