Получить все строки, которые соответствуют условиям времени из файла журнала - PullRequest
0 голосов
/ 18 октября 2018

Вот как выглядит мой файл журнала

[BCDID::16 T::LIVE_ANALYZER GCDID::16] {"t":"20:50:05","k":"7322","h":"178","s":-53.134575556764}
[BCDID::16 T::LIVE_ANALYZER GCDID::16] {"t":"20:50:06","k":"2115","h":"178","s":-53.134575556764}
[BCDID::16 T::LIVE_ANALYZER GCDID::16] {"t":"20:50:07","k":"1511","h":"178","s":-53.134575556764}

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

здесь "t" : "20:50:05" - это время.

Я хочу получить все журналы за определенное время из всех файлов в конце файлов.

Я пытался с tail files*.log | grep -e "20:50:07 | 20:50:05", но он ничего не возвращает.

Как мне получить все записи журнала между заданным временем, начиная с конца файла из всех файлов журнала?

1 Ответ

0 голосов
/ 18 октября 2018

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

Однострочное awk-решение, например:

tail files*.log | awk -v from="205006" -v to="205007" -F"\"" '{ timeasint=$4; gsub(":","",timeasint); if (timeasint >= from && timeasint <= to) print $0 }'

даст вам:

[BCDID::16 T::LIVE_ANALYZER GCDID::16] {"t":"20:50:06","k":"2115","h":"178","s":-53.134575556764}
[BCDID::16 T::LIVE_ANALYZER GCDID::16] {"t":"20:50:07","k":"1511","h":"178","s":-53.134575556764}

Конечно, вы не можете охватить полночь (т.е. 25:59: 59 - 00:00:01), но для этого вам все равно понадобятся даты и время в вашем журнале.

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

...