每当两个连续日志之间的时间戳不同时,我试图在/ var / log / messages输出中附加一些文本,例如:
上一个日志: 00:01:5 9和当前日志 00:02:0 0
或
上一个日志: 00:01:4 9和当前日志 00:01:5 0
如果时间戳记的子字符串在连续日志中不同,请在$0
后面附加一些消息。
您可以按照以下命令运行,该命令工作1分钟,需要10秒钟。
tail -f /var/log/messages |awk '{split($3,a,":");split($3,b,"");new_time=a[1]":"a[2]":"b[1]; if(prev_time==new_time) print $0; else print "10 Second group is over, starting new: "$0" "prev_time " "new_time } {split($3,a,":");split($3,b,"");prev_time=a[1]":"a[2]":"b[1]}'
所需结果是对上述命令的修改,以在10秒钟的日志间隔中打印相同的消息,当前执行1分钟。我已经使用split()捕获了'HH:MM:S
“而不是” HH:MM:SS
“,因此每当私有的'HH:MM:S
”和当前的'HH:MM:S
“ differ时,打印消息” { {1}}”。不确定此处的错误是什么。
简而言之,目前它的工作方式是每分钟更改一次,而当第二秒从39秒更改为40秒或从09秒更改为10秒时,我需要它。不是11秒到12秒。 HH:MM: S S,需要更改为粗体的S。
示例行:
10 Second group is over, starting new: $0
答案 0 :(得分:1)
这是一般想法:
$ for((i=35;i<45;i++)); do echo Jan 23 00:01:$i; done |
awk '{split($3,a,":"); print $0, (p!=(c=int(a[3]/10))?"<<<":""); p=c}'
Jan 23 00:01:35 <<<
Jan 23 00:01:36
Jan 23 00:01:37
Jan 23 00:01:38
Jan 23 00:01:39
Jan 23 00:01:40 <<<
Jan 23 00:01:41
Jan 23 00:01:42
Jan 23 00:01:43
Jan 23 00:01:44
第一部分是为脚本生成的测试数据,因为您没有提供足够的数据。第一行存在虚假匹配,可以通过NR>1
条件消除,但我认为这不是关键。