我正在使用此漂亮的单线线来为我的日志文件的每一行添加时间戳:
tail -f log | grep -a --line-buffered "." | awk '{ print strftime("%st"), $0; fflush() }'
不幸的是,当我需要数据点之间的毫秒分辨率时,它只提供了完整的秒。是否有同样优雅的解决方案来获得Timestamp MS?我不在乎自时代以来的时间,只关心线之间的差异。
谢谢!
您可以尝试用perl及其Time::HiRes
内置模块替换GREP和尴尬,例如:
tail -f infile | perl -MTime::HiRes=time -ne 'printf "%.3ft%s", time(), $_'
它产生了类似的东西:
1390014680.197 one
1390014680.197 two
1390014680.197 three
1390014680.197 four
1390014680.197 five
1390014680.197 six
1390014689.414 seven
1390014693.542 eight
您可以使用awk
,但需要更改一些:
tail -f log | grep -a --line-buffered "." | awk '{ print d, $0; fflush() }' d=$(date -Ins)
用 sed
替换 awk
,然后使用 $(date -Ins)
添加ISO 8601时间戳记,nansecond precision。
tail -f infile | grep -a --line-buffered "." | sed 's/^/'"$(date -Ins)t"'/'
2014-01-18T17:24:08,110459605+1100 one
2014-01-18T17:24:08,110459605+1100 two
2014-01-18T17:24:08,110459605+1100 three
或$(date --rfc-3339=ns)
用于替代格式:
tail -f infile | grep -a --line-buffered "." | sed 's/^/'"$(date --rfc-3339=ns)t"'/'
2014-01-18 17:24:51.985434198+11:00 one
2014-01-18 17:24:51.985434198+11:00 two
2014-01-18 17:24:51.985434198+11:00 three