shell 在`tail -f`中自动插入空行

iszxjhcz  于 11个月前  发布在  Shell
关注(0)|答案(2)|浏览(117)

有一个日志文件,如:

[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个连续行之间存在超过2秒的间隙)。

z9zf31ra

z9zf31ra1#

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'

pgky5nke

pgky5nke2#

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
    }

字符串
两句话:

  • 这将导致您在2秒内没有输出;您可以更频繁地检查最后一行并保持时间戳;但这需要更多的代码...
  • 这取决于所有行都是唯一的这一事实;这在您的情况下是合理的;因为您在每行中都有时间戳

相关问题