получить последние 5 минут журнала из файла журнала со строкой поиска - PullRequest
0 голосов
/ 29 апреля 2020

У нас есть 2 различных формата файла журнала,

1.
Some strings : 20200429 064351 Name : server Error 
2.
ERROR       Error Message
TIME        Wed Apr 29 11:36:39 2020
Release     123

Я попробовал следующую команду, чтобы автоматически получить содержимое журнала за последние 5 минут из файла журнала.

sed -n "/ $(date +\%R -d "-5 min")/,$"p logfile.log | grep "ERROR"

но это не сработало.

Та же команда пробовала с другим файлом журнала, и она сработала. Формат файла рабочего журнала

29.04.2020 00:00:08 some string.

Есть решение?

1 Ответ

1 голос
/ 29 апреля 2020

В вашем скрипте три проблемы:

a) sed при его вызове все входные строки будут напечатаны как минимум один раз, а последние - дважды; это можно исправить, выполнив sed -e "/$pattern/,\$p" -e "d" logfile.log, добавив аргументы -e d в конце ваших опций перед именем файла;

b) время, возвращаемое с опцией %R, содержит :, которые не представлять свой лог-файл; Вы можете исправить это, используя формат даты +'%Y%M%d %H%M';

c) Строка, которую вы ищете, Error, но вы указываете ERROR в качестве аргумента для grep, что не происходит для работы, поскольку grep аргументы по умолчанию чувствительны к регистру.

Попробуйте:

pattern=$(date +'%Y%M%d %H%M' -d '-5 minutes')
sed -e "/: \*\*$pattern/,\$p"  -e "d" logfile.log | grep "Error"

Но проще выдать все, начиная с sed, без grep:

pattern=$(date +'%Y%M%d %H%M' -d '-5 minutes')
sed -e "/: \*\*$pattern/,\${/Error/p}" -e "d" logfile.log
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...