如何为串行设备输出的每行添加时间戳?

如何为串行设备输出的每行添加时间戳?

我通过 访问串行测量设备screen /dev/tty.usbserial 9600。设备在测量时会输出其数据n每秒在一行上记录次。我怎样才能在每一行(或每隔几行,如果它使日志速度太慢)添加一个时间戳?

我在 OSX 10.8.2 上使用 Terminal.app 作为我的终端。

答案1

我找不到任何方法让屏幕打印时间戳。相反,创建屏幕的日志文件并使用 awk 打印它效果很好!

1. 创建(或编辑)~/.screenrc 以让屏幕创建日志文件。

将日志配置添加到主目录中的 .screenrc(屏幕的配置文件)。

logfile "/path/to/log/file" # Specify log file name with absolute path.
logfile flush 1
deflog on

2. 开始屏幕

$ screen /dev/tty.usbserial 9600 -L

然后 screen 开始创建日志文件。(还有其他一些创建日志文件的方法。)

3.使用tail + awk打印文件

在另一个终端窗口中运行此 shell 命令。

$ tail -f screen.log | awk '{ print strftime("%H:%M:%S"), $0; fflush(); }'

它打印带有时间戳的日志文件!

15:41:27 xxx
15:41:28 xxx
15:41:29 xxx
15:41:30 xxx
15:41:31 xxx

如果您想将带有时间戳的日志打印到标准输出和文件,请将其通过管道传输到 tee 命令。

$ tail -f /path/to/log/file | awk '{print strftime("%H:%M:%S"),$0; fflush();}' | tee /path/to/another/file

相关内容