сценарий оболочки / командная строка для чтения самой последней отметки времени из файла журнала - PullRequest
1 голос
/ 02 февраля 2012

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

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

Я думаю о запуске tail -f|grep в файле журнала, передавая вывод в какой-то вариантdate чтобы преобразовать отформатированное время в время эпохи Unix и передать его в скрипт, который запомнит наибольшее число, увиденное до сих пор.

У кого-нибудь есть скрипт, который будет это делать?

Изменить: форматы даты: ГГГГ-ММ-ДД ЧЧ: ММ: СС, т.е. 2012-02-02 04: 15: 15

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Для печати текущего наибольшего значения:

$ tail -F youfile.log |
> awk 'NR == 1 {max=$0; print max} $0 > max {max = $0; print max}' 

Пример

$ printf "2010-10-01 01:02:02 a
2010-09-30 02:03:04 b\n2010-08-29 01:02:02 c\n2010-10-01 01:02:03 d\n" |
> awk 'NR == 1 {max=$0; print max} $0 > max {max = $0; print max}'

Вывод

2010-10-01 01:02:02 a
2010-10-01 01:02:03 d
0 голосов
/ 02 февраля 2012

Полагаю, ваши метки времени имеют формат «ГГГГ-ММ-ДД ЧЧ: ММ: СС» или что-то подобное.

watch 'tail -n 20 yourfile.log | LANG=C sort | tail -n 1'

или, если вы предпочитаете просматривать историю:

while true
do
  tail -n 20 yourfile.log | LANG=C sort | tail -n 1
  sleep 2
done

Используйте LANG=C до sort, поскольку sort может вести себя по-разному в зависимости от ваших местных жителей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...