将时间戳附加到 tail -f 结果

将时间戳附加到 tail -f 结果

我希望在“tail -f outputfile”输出的每一行前面打印一个时间戳,这样我就能知道每一行是什么时候打印的。类似于:

[...]
20110617_070222:结果打印于此
20110617_070312:结果打印于此
20110617_070412:结果打印于此
20110617_070513:结果打印于此
[...]

有任何想法吗?

答案1

可能不会有比这更短的了:

tail -f outputfile | xargs -IL date +"%Y%m%d_%H%M%S:L"

请注意,我使用了您的问题建议的时间戳格式,但您可以自由使用命令支持的任何格式date(标准 BSD 和 GNU 日期支持该格式语法)。

答案2

编写一个简单的脚本来实现这一点。下面是 perl 中的一个示例:

#!/usr/bin/perl
while(<>) {
    print localtime . ": $_";
}

要使用该脚本,只需通过它传输尾部输出即可:

tail -f outputfile | ./prepend_timestamp.pl

您也可以内联地执行此操作:

tail -f outputfile | perl -pe '$_ = localtime.": $_"'

答案3

我通常会按照其他人的回答使用 perl 来执行此操作,但是在我需要它的相当精简的 Linux 机器上它不可用,而 busybox awk 小程序却可用!

tail -f some_file  | awk -e '{ print strftime("%Y%m%d_%H%M%S",systime()) "\t" $0}'

与往常一样,时间戳指的是打印该行的时间,而不是最初写入的时间。

答案4

awk

tail -f infile | awk '{"date \"+%Y%m%d_%H%M%S\"" | getline now} {close("date")} {print now ": " $0}'

相关内容