我有一个来自记录器的无限数据流,我正在将其传输到grep。我想将grep的输出保存到一个文件中,但也要在每行的开头(该行出现的时间)包含一个时间戳。有没有一种简单的方法可以做到这一点?假设我无法更改记录器进程的输出。
您可以使用sed
和date
:附加静态时间戳
... | sed "s/^/$(date) /" >> output.txt
或者,如果您需要实时时间戳,请使用gawk
的strftime函数:
... | gawk '{ print strftime(), $0 }'
你可以定义你喜欢的格式:
... | gawk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0 }'
如果缓冲是一个问题,不要忘记刷新每一行:
... | 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
(来自更多实用程序):
... | 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) 问一个问题。