【发布时间】:2015-01-15 19:24:07
【问题描述】:
问题说明
在 Ubuntu 上使用 bash,我使用 java prog 通过串行(它连接到无线基站)连续读取一些数据包,并将其通过 cut 和 @987654323 管道传输@ 得到结果。我使用unbuffer 实时查看输出(否则输出等到缓冲区满)。
我在终端上发出的命令的语法:
java prog | unbuffer -p process1 | unbuffer -p process2
我发出的实际命令:
java net.tinyos.tools.Listen -comm serial@/dev/ttyUSB0:telosb |
unbuffer -p cut -c49-50,52-53,55-56,58-59,60,61-62,64-65,67-68,70-71,72,73-74,76-77,79-80,82-83 |
unbuffer -p awk -F " " '{printf("%d %5.4f %5.4f\n",("0x"$1)*1,("0x"$2)*2*0.0005714,("0x"$3)/612500)}'
我的输出:
43301 1.9370 5.0124
0 0.0000 0.0000
43303 1.9279 5.0071
0 0.0000 0.0000
43305 1.9428 5.0125
0 0.0000 0.0000
43306 1.9428 5.0072
0 0.0000 0.0000
.
.
.
零线不是真实的而是虚假的。如果我只执行java prog(即cut之前)或java prog + process1(即AWK之前),它们不会出现。它们仅在 process2 之后出现在输出中,在使用 awk 之后。
我想要什么
我想找出为什么我的输出中有零以及如何。
感谢您的帮助。谢谢。
补充数据
其中一个接收到的数据包看起来像这样(在java prog之后输出)。都是hex(现阶段未分组):
00 FF FF 00 01 1C 22 95 00 00 00 00 00 00 00 00 00 00 25 83 00 00 06 95 00 2E BF 60 00 2E C0 BB 00 00 00 00
在上面,看起来所有数字都是两个一组。但是里面有数字集群——因此我cut它们的方式是我相应地重新组合它们。 cut之后的输出如下:
java prog + process1之后的输出:
0000A995 00000697 002EBE00
0000A998 0000069F 002EE4FB
0000A99C 000006A4 002EBF9F
0000B421 000006A4 002ECC6B
.
.
.
注意:这两个输出不是它们自己的转换。它们是在不同的情况下拍摄的,只是为了提供一个例子。
【问题讨论】:
-
输出行尾随空格 — ick.
-
@JonathanLeffler 我检查了。输出行中没有任何尾随空格。
-
那么请显示您的实际代码,因为
"%d \n"在换行符之前强制使用空格。
标签: linux bash awk terminal cut