我有一个进程的日志文件,该进程每 5 分钟记录一次,但不是精确的分钟/秒,我想找到每小时的第一条日志消息。示例行如下所示:
2013-01-01 09:03:55 foo bar some log message foo bar
grep
提取那些第一时间行的正则表达式是什么?
就像是
grep "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:0[0-5]" logfile
您不能使用 grep 每小时只获取第一行,因为它不会在匹配之间保持状态。像这样的事情会在例如每小时的前五分钟获得所有线路:
grep '\d\d:0[0-5]:\d\d' logfile
您可以使用 awk 获取每小时前五分钟的第一个条目:
awk -F'[ :]' 'BEGIN {hh=-1} $2!=hh && $3>=0 && $3<5 {hh=$2; print}' test