所以现在我尝试做以下事情:
grep "string" logfile.txt
这很好,但有很多"字符串"在logfile.txt中;我真的只想看到最后一小时的价值。在伪代码中我想做...
grep "string" logfile.txt OnlyShowThoseInTheLastHour
有什么方法可以轻松地在bash中实现这一点吗?在日志文件中,行看起来像这样:
13:27:50 string morestuff morestuff morestuff
编辑:抱歉,我忘了提及它,但是查看过去几天类似时间的日志不是问题,因为这些日志每天都会刷新/存档。
答案 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%精确的结果。再次 - 由于日志在午夜重新开始,在您的具体情况下,这根本不是问题。