与 Hexdump 绑定时间戳?

与 Hexdump 绑定时间戳?

我正在运行下面给出的脚本,

sudo  hexdump -v -e '1/1 "%02x\n"' /dev/ttyUSB0  | Many Pipes | gawk '{ print strftime(":: %s"), $0 }'

这里的数据是带有时间戳的十六进制转储,如下所示,

:: 1461680718 ::ED.DATA

:: 1461680718 ::ED.DATA

:: 1461680718 ::ED.DATA

:: 1461680718 ::ED.DATA

:: 1461680718 ::ED.DATA

:: 1461680718 ::ED.DATA

:: 1461680719 ::ED.DATA

正如您所看到的,所有数据包的时间都没有改变。我认为这是因为我正在转储数据而不是读取行。有什么方法可以编写脚本并确保我为每个数据包获得不同的值(以秒为单位)

答案1

同样的时间来自缓冲。尝试找到在队列中缓冲的命令并尝试该命令unbuffer

答案2

stdbuf -oL我在 jessie pi 上尝试了以下操作,并且在 hexdump 前面按预期工作没有问题。

while sleep .5;do echo -n x;done |
stdbuf -oL hexdump -v -e '1/1 "%02x\n"' |
ts %.s |
cat

while是为了模拟慢速输入,ts为每行添加时间戳,并且cat只是提供另一个管道。输出是规则的,前 2 行之后的时间戳相差约 0.5 秒。该ts命令来自moreutils包。

尝试stdbuf -oL在管道中的每个命令上使用。

相关内容