有一个日志文件,例如:
[DEBUG][2016-06-24 11:10:10,064][DataSourceImpl] - [line A...]
[DEBUG][2016-06-24 11:10:10,069][DataSourceImpl] - [line B...]
[DEBUG][2016-06-24 11:10:12,112][DataSourceImpl] - [line C...]
在
tail -f
实时监控下,是否可以在 2 秒不活动后自动插入(通过我们通过管道传送到 tail
的命令)“空白行”?
预期结果:
[DEBUG][2016-06-24 11:10:10,064][DataSourceImpl] - [line A...]
[DEBUG][2016-06-24 11:10:10,069][DataSourceImpl] - [line B...]
---
[DEBUG][2016-06-24 11:10:12,112][DataSourceImpl] - [line C...]
(因为连续两行之间有超过2秒的间隙)。
awk -F'[][\\- ,:]+' '1'
上面将在
]
、[
、-
、,
、
和 :
上拆分字段,以便每个字段如下所述:
[DEBUG][2016-06-24 11:10:10,064][DataSourceImpl] - [line A...]
22222 3333 44 55 66 77 88 999 ...
然后您可以连接一些字段并使用它来测量时间差:
tail -f input.log | awk -F'[][\\- ,:]+' '{ curr=$3$4$5$6$7$8$9 }
prev + 2000 < curr { print "" } # Print empty line if two seconds
# have passed since last record.
{ prev=curr } 1'
tail
没有这个功能。如果您愿意,您可以实现一个程序或脚本来检查文件的最后一行;类似于(伪代码)
previous_last_line = last line of your file
while(sleep 2 seconds)
{
if (last_line == previous_last_line)
print newline
else
print lines since previous_last_line
}
两点备注:
我专门为此目的编写了一个脚本: