只输出最近2分钟的日志

只输出最近2分钟的日志

我有一个日志文件:
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 秒)?

谢谢!

答案1

尝试一下:

last=$(sed -n '$s/^\([0-9]\+\).*/\1/p')
awk -F ASDF -v last=$last '$1 >= last - 120'

答案2

您可以像这样获取当前时间戳:

date +s%

当前时间戳-2分钟例如这样:

date -d @$((`date +%s`-120)) +%s

因此,您有两个整数值,并且想要 grep 以该范围开始的行。有很多方法可以做到这一点(awk、sed 等)

Sed 示例:

sed -n -e '/start_time_stamp/,/stop_time_stamp/p' log_file

想要其他方法,请尝试这个出色的工具:http://lmgtfy.com/?q=grep+number+range

相关内容