如何从grep中添加时间戳到每一行?

时间:2012-07-30 23:35:35

标签: php logging grep timestamp

我有一个无限的数据流来自记录器,我正在为grep管道。我想将grep的输出保存到文件中,但还要在每行的开头(行出现的时间)中包含一个时间戳。有没有一种简单的方法来实现这一目标?假设我无法更改记录器过程的输出。

1 个答案:

答案 0 :(得分:5)

您可以使用seddate追加静态时间戳

... | sed "s/^/$(date) /" >> output.txt

或者,如果您需要实时时间戳,请使用gawk的{​​{3}}:

... | gawk '{ print strftime(), $0 }'

您可以定义自己喜欢的格式:

... | gawk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0 }'

如果缓冲是一个问题,请不要忘记每行strftime function

... | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; fflush() }'

或者,使用unbuffer

unbuffer ... | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0 }'

如果您没有gawk,则有几个其他选项

(a)安装ts(来自flush):

... | ts '%F %T'

(b)使用perl

... | perl -pe 's/^/localtime . " "/e'

或格式化:

... | perl -MPOSIX -pe 's/^/strftime("%Y-%m-%d %H:%M:%S", localtime) . " "/e'

如果您需要格式化为您的语言区域的GMT,请不要忘记您可以使用gmtime代替localtime

(c)moreutils