在Bash中,您如何仅读取日志中超过某个时间戳的行?

时间:2015-09-05 17:42:28

标签: string parsing awk grep timestamp

所以现在我尝试做以下事情:

grep "string" logfile.txt

这很好,但有很多"字符串"在logfile.txt中;我真的只想看到最后一小时的价值。在伪代码中我想做...

grep "string" logfile.txt  OnlyShowThoseInTheLastHour

有什么方法可以轻松地在bash中实现这一点吗?在日志文件中,行看起来像这样:

13:27:50  string   morestuff morestuff morestuff

编辑:抱歉,我忘了提及它,但是查看过去几天类似时间的日志不是问题,因为这些日志每天都会刷新/存档。

1 个答案:

答案 0 :(得分:1)

这应该这样做:

mail()

awk 'BEGIN { tm = strftime("%H:%M:%S", systime()-3600) } /string/ && $1 >= tm' logfile.txt 替换为您感兴趣的模式。

首先构建一个字符串,保存时间信息从1小时前以string格式,然后选择那些仅匹配HH:MM:SS并且第一个字段(时间戳)按字典顺序大于或等于等于刚刚构建的时间戳字符串。

请注意,它有其局限性,例如,如果您在00:30执行此操作,则从23:30到23:59的日志条目将不匹配。通常,在00:00到00:59之间的任何时间运行此命令可能会忽略23:00到23:59之间的日志条目。但是,这对您来说不应该是一个问题,因为您提到(在评论中)记录存档并在每个午夜重新开始。

此外,不处理闰秒,但这可能不是问题,除非您需要100%精确的结果。再次 - 由于日志在午夜重新开始,在您的具体情况下,这根本不是问题。