我正在运行下面给出的脚本,
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
在管道中的每个命令上使用。