Bash:仅在具有时间戳的文件中的特定时间之后显示行

时间:2014-08-17 06:06:47

标签: bash

我正在运行一个后台脚本,该脚本涉及每5分钟读取一个日志文件,格式如下

21:25:57 [INFO] event from 5 minutes ago
21:26:54 [INFO] potentially relevant event
21:28:26 [INFO] some event
21:30:06 [INFO] another event

除了我只想查看过去5分钟内打印的线条。基本上我需要找到最接近文件末尾的date -s "$logdate" +%s <= date -d "5 min ago" +%s行,并忽略它之前的所有行。

不幸的是,时间戳中没有日期,因此除非我重新启动服务器并重置日志(我不愿意),否则每天都会重复出现时间戳。使用tac代替cat可能更有效,因为我只关心从文件末尾开始的行。

1 个答案:

答案 0 :(得分:0)

如果你有GNU日期:

$ date +%T
04:56:32
$ date -d "5 min ago" +%T
04:51:45

你可以这样做:

tac logfile | awk -v start=$(date -d "5 min ago" +%T) '$1 < start {exit} 1' | tac