我希望在“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}'