У меня есть файл журнала:
http://pastebin.com/raw.php?i=cdUpTqNV
первый столбец перед «ASDF» - это то же время, что и в данной строке, но во время unix [я думаю, что это проще сделать с временем unix].
Мне просто нужны строки, которые были за последние 2 минуты:
Окончание: 07:55:08 - последний раз в лог-файле
Начало: 07:53:09 - максимум за 2 минуты до последней строки журнала в файле журнала
Результат вставленного текста будет:
1295938389ASDF 01 25 07:53:09 router authpriv.notice dropbear[20673]: password auth succeeded for 'root' from 192.168.1.201:43822
1295938401ASDF 01 25 07:53:21 router daemon.info dnsmasq-dhcp[1140]: DHCPREQUEST(br-lan) 192.168.1.201 01:2c:23:c3:32:f3
1295938401ASDF 01 25 07:53:21 router daemon.info dnsmasq-dhcp[1140]: DHCPACK(br-lan) 192.168.1.201 01:2c:23:c3:32:f3
1295938508ASDF 01 25 07:55:08 router daemon.info dnsmasq-dhcp[1140]: DHCPREQUEST(br-lan) 192.168.1.201 01:2c:23:c3:32:f3
1295938508ASDF 01 25 07:55:08 router daemon.info dnsmasq-dhcp[1140]: DHCPACK(br-lan) 192.168.1.201 01:2c:23:c3:32:f3
Как это сделать, используя только минимальные инструменты * nix? [это маршрутизатор OpenWrt, без perl :(]
Итак, как это сделать: выводить только строку (время последней строки журнала - 120 сек)?
Спасибо!
Вы можете получить текущую временную метку следующим образом:
date +s%
И текущая отметка времени - 2 минуты, например, так:
date -d @$((`date +%s`-120)) +%s
Итак, у вас есть два целых значения, и вы хотите найти строки, которые начинаются в этом диапазоне. Есть много способов сделать это (awk, sed, ...)
Пример седла:
sed -n -e '/start_time_stamp/,/stop_time_stamp/p' log_file
В других случаях попробуйте этот великолепный инструмент: http://lmgtfy.com/?q=grep+number+range
Попробуйте:
last=$(sed -n '$s/^\([0-9]\+\).*/\1/p')
awk -F ASDF -v last=$last '$1 >= last - 120'