Мне нужна ваша помощь в разборе файла журнала с помощью AWK (желательно), чтобы извлечь только необходимую информацию. Я упростила это, чтобы быть более заметной, и это выглядит так:
2019-05-22 HH:MM:SS name:Jhon 1 + random_text
LOG_TEXT 1
LOG_TEXT 1
2019-05-22 HH:MM:SS whatever:Jhon 1 + random_text
2019-05-22 HH:MM:SS name:Jhon 2 + random_text
LOG_TEXT 2
LOG_TEXT 2
2019-05-22 HH:MM:SS ANYTHING 2 + random_text
2019-05-22 HH:MM:SS name:Jhon 3 + random_text
LOG_TEXT 3
LOG_TEXT 3
2019-05-22 HH:MM:SS name:Jhon 3 + random_text
Подробное описание:
Общая идея состоит в том, чтобы фильтровать только строки, содержащие «name: Jhon» (без учета: Jhon) и соответствующий им LOG TEXT (который может содержать что угодно, но не имеет метки времени!).
Я пронумеровал каждую строку в конце, чтобы сделать 3 группы возможных ситуаций более заметными (LOG TEXT, заканчивающийся строкой «what: JHON» (1-я строка не печатается); общей строкой с датой и меткой «ANYTHING» ( 2 - строка не напечатана) или с именем "JHON" (3 - строка напечатана))
Функциональность является частью рабочего процесса в Vmware Vrealize orchestrator (так что настоящий язык - JS, но я могу использовать ssh и awk), но я не буду углубляться в это.
Я пробовал различные шаблоны awk и regex, но не смог понять это.
Самое близкое, что я мог получить, - это что-то похожее на это:
awk '/Jhon/{flag=1}/whatever/{flag=0}flag' file.txt
Но это неправильно, поскольку я считаю «что угодно» фиксированным шаблоном, а также, в этом случае строка, содержащая «НИЧЕГО», не фильтруется. В действительности, «что угодно» и «что угодно» (а также random_text и time HH: MM: SS) могут быть литературными и любыми. Поэтому единственный способ остановить сопоставление - это остановить его на строках, начинающихся с формата даты (но я не могу использовать 2019, так как он используется в каждой строке, отличной от LOG_TEXT).
Также пробовал с некоторым регулярным выражением JS, но это слишком сложно.
Окончательный результат должен выглядеть следующим образом:
2019-05-22 HH:MM:SS name:Jhon 1 + random_text
LOG_TEXT 1
LOG_TEXT 1
2019-05-22 HH:MM:SS name:Jhon 2 + random_text
LOG_TEXT 2
LOG_TEXT 2
2019-05-22 HH:MM:SS name:Jhon 3 + random_text
LOG_TEXT 3
LOG_TEXT 3
2019-05-22 HH:MM:SS name:Jhon 3 + random_text