【问题标题】:tail -f, insert line break after log is idle for 3 seconds? [closed]tail -f,在日志空闲 3 秒后插入换行符? [关闭]
【发布时间】:2018-02-22 11:52:49
【问题描述】:

编辑:

我后来在正确的 place : stackexchange site only for Linux/Unix上发布了这个问题

:EndEdit

在执行tail -f error.log 时,如何在 3 秒内没有任何内容附加到文件后以编程方式插入换行符?

(显然,一旦添加了一个换行符,在将其他文本行添加到日志文件之前,不应添加其他换行符)

例如,这些行被附加到 error.log 中:

foo
bar
boo [[wait 4 seconds]]
2far
2foo
2bar
2boo [[wait 40 seconds]]
2far

其中 [[wait X seconds]] 是从下一行追加的延迟(这不是输入文本的一部分)

这将是控制台中的输出:

foo
bar
boo

2far
2foo
2bar
2boo

2far

【问题讨论】:

  • 我投票结束这个问题,因为它是一个自我承认的跨站点重复,
  • 感谢您的建议。我也这样做。

标签: linux bash


【解决方案1】:
while read -r line;do n=$(date +%s); [ $nn -lt $(( n - 3 )) ] && echo ; nn=$n;  echo $line;  done < <(tail -f /path/to/somelogfile)

这里,'tail -f' 命令的输出使用Process Substitution 传递给while 循环。 while 循环逐行读取 tail 的输出并打印出来,同时保持上次读取一行时的时间戳。如果上次保存的时间戳超过 3 秒前,它会打印一个空行。请注意,将在打印下一行之前打印空行,而不是在上次更新后 3 秒后立即打印。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2018-03-22
    • 1970-01-01
    相关资源
    最近更新 更多