Плитка logfile на куски и поиск ошибок

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

Маленький пример:

Файл журнала выглядит следующим образом:

STARTLOG1
блаб
more_blabla
ENDLOG1
STARTLOG2
ОШИБКА: Errortext
Это ошибка
от пользователя XYZ
ENDLOG2
STARTLOG3
блаб
more_blabla
ENDLOG3

Я хочу разбивать logfile на куски. Все строки между STARTLOG и ENDLOG должны быть 1 шт. Когда в куске появляется ошибка, извлеките весь фрагмент в файл. Файл должен выглядеть так:

STARTLOG2
ОШИБКА: Errortext
Это ошибка
от пользователя XYZ
ENDLOG2

One Solution collect form web for “Плитка logfile на куски и поиск ошибок”

Попробуй это:

$ awk -v RS="STARTLOG" '/ERROR/{print RS$0; }' log STARTLOG2 ERROR: Errortext This is an Error from user XYZ ENDLOG2 

Для перенаправления на файл с именем logN где N – номер из STARTLOG , используйте:

 gawk -v RS="STARTLOG" '/ERROR/{print RS$0 > "log"$1; }' log 

объяснение

RS является разделителем записей, это то, что определяет, что такое «строка» для awk . Здесь я устанавливаю его в STARTLOG чтобы вся запись обрабатывалась как одна строка. Затем, если эта «строка» содержит ERROR , я печатаю STARTLOG ( RS , это просто для воссоздания того же формата).

Вы также можете использовать один и тот же подход с Perl:

 perl -lne 'BEGIN{$/="STARTLOG"}{print "$/$_" if /ERROR/}' log 
  • Создание сценария оболочки для записи в файл XML
  • Как инициализировать массив с помощью awk и bash?
  • У меня есть несколько копий .bash_profile, какой из них действительно используется? (если есть)
  • Bash: Как читать по одной строке за один раз из вывода команды?
  • создание пользователя add
  • Рекурсивная функция не работает
  • Как я могу выполнить скрипт оболочки, который существует в длинном пути с помощью одной команды без первого cd'ing в каталог?
  • Чтение пространства в качестве входного файла в сценарии оболочки
  • Сценарий с ошибкой «команда не найдена: ^ M»
  • в zsh, как скрыть обратную косую черту в меню завершения
  • Любое специальное разрешение ssh удаленная команда, работающая над файлом fifo (так называемый канал)?
  • Linux и Unix - лучшая ОС в мире.