Как я могу проанализировать временную метку из моего файла журнала?

#string #bash #logging #extract

#строка #bash #ведение журнала #извлечь

Вопрос:

У меня есть файл журнала в Linux, который содержит информацию такого типа:

 20200910:16:59:38 gpbackup:gpadmin:mdw:024273-[INFO]:-Starting backup of database mydb
20200910:16:59:38 gpbackup:gpadmin:mdw:024273-[INFO]:-Backup Timestamp = 20200910165938
  

Мне нужно получить значение временной метки (20200910165938). Мне просто нужно что-нибудь после слова Временная метка, равно и пробел. В файле журнала есть только одно вхождение этой строки.

Как я могу этого добиться?

Ответ №1:

С awk . Выведите последнее поле ( NF ) для строк, где Timestamp это третье поле с конца ( NF-2 ).

 awk '$(NF-2)=="Timestamp" {print $NF}' file
  

Ответ №2:

Сначала давайте создадим файл тестовых данных.

 cat <<EOF > data.txt
20200910:16:59:38 gpbackup:gpadmin:mdw:024273-[INFO]:-Starting backup of database mydb
20200910:16:59:38 gpbackup:gpadmin:mdw:024273-[INFO]:-Backup Timestamp = 20200910165938
  

Теперь используйте некоторые распространенные инструменты Unix для извлечения временной метки.

 cat data.txt | grep Timestamp | rev | cut -d' ' -f1 | rev
  
  • grep — находит правильную строку для обработки.
  • rev — переворачивает строку так, чтобы первый пробел ограничивал конец временной метки.
  • вырезать — извлекает обратную временную метку
  • rev — переворачивает временную метку в надлежащую последовательность.

Ответ №3:

 perl -lne 'print for /Timestamps =s (d )/;' logfile
  

Однострочник Perl использует эти флаги командной строки:
-e : Указывает Perl искать код в строке, а не в файле.
-n : Перебирайте входные данные по одной строке за раз, присваивая им значение $_ по умолчанию.
-l : Удалите разделитель строк ввода ( "n" по умолчанию * NIX) перед выполнением кода в строке и добавьте его при печати.

Регулярное выражение работает следующим образом:
s : 1 или более пробелов.
d : 1 или более цифр.
(d ) : захват 1 или более цифр. Если регулярное выражение совпадает, это «группа захвата» (здесь, временная метка) возвращается регулярным выражением в виде списка, а затем печатается. Если регулярное выражение не совпадает, возвращается пустой список, и ничего не печатается.

СМОТРИТЕ ТАКЖЕ:

perldoc perlrun : как запустить интерпретатор Perl: переключатели командной строки
perldoc perlre : Регулярные выражения Perl (regexes)
perldoc perlre : Регулярные выражения Perl (regexes): кванторы; Классы символов и другие специальные экранирования; Утверждения; Группы захвата