【问题标题】:Auto-insert blank lines in `tail -f`在 `tail -f` 中自动插入空行
【发布时间】:2016-06-24 09:17:15
【问题描述】:

有一个日志文件,例如:

[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 秒的间隔)。

【问题讨论】:

    标签: shell awk pipe tail


    【解决方案1】:
    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'
    

    【讨论】:

    • 太短了!非常感谢这件精美的艺术品。
    • 我意识到我有一些多行“事件”,即第一行带有时间戳和所有;以下行没有这样的前缀。你怎么能考虑到这一点?
    • 在 DST 或闰日或闰秒转换期间,它的行为将不符合预期。这可能没问题,但需要注意。
    • 奇怪的是,我确实在每分钟转换时插入了一个空行,即每 60 秒(如果有其他行)。
    【解决方案2】:

    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 秒内没有输出;您可以更频繁地检查最后一行并保留时间戳;但这需要更多代码...
    • 这取决于所有行都是唯一的这一事实;在您的情况下这是合理的;因为你在每一行都有时间戳

    【讨论】:

    • 事实上,脚本不应该等待 2 秒。但如果日志中 2 秒或更长时间没有活动,则可以先插入一个空行。
    • 我知道,这是我提出的脚本的“不良副作用”。就像我说的;您可以考虑另一种处理方式;更频繁地检查文件的最后一行;并输出你看到的每一行;保持你最后一次看到一行的时间戳,......但这可能会非常快速地消耗资源......
    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2015-08-03
    • 2017-05-10
    • 2012-05-31
    相关资源
    最近更新 更多