gpt4 book ai didi

linux - AWK 输出中不需要的零

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:23 25 4
gpt4 key购买 nike

问题解释

在 Ubuntu 上使用 bash,我使用 java prog 通过串口(它连接到无线基站)连续读取一些数据包,并通过 管道传输 cutawk 得到一个结果。我使用 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后的输出如下:

java prog + process1 后的输出:

0000A995 00000697 002EBE00
0000A998 0000069F 002EE4FB
0000A99C 000006A4 002EBF9F
0000B421 000006A4 002ECC6B
.
.
.

注意:这两个输出不是它们自己的转换。它们是在不同的情况下拍摄的,仅供引用。

最佳答案

您正在使用 printf("%d\n","0x"$1),即 printf 期望一个数字是 Ox 的值$1。因此,当它不是数字时,awk 打印 0

可能您想改用 %s,以便打印一个字符串。

看一个例子:

$ awk 'BEGIN {printf("%d \n","0xAA")}'
0
$ awk 'BEGIN {printf("%s \n","0xAA")}'
0xAA

您可以在 awk 手册中看到完整的 printf 格式控制字母列表:http://www.gnu.org/software/gawk/manual/gawk.html#Control-Letters .

与 awk 和 gawk 中的十六进制值相关的有趣阅读:http://www.delorie.com/gnu/docs/gawk/gawk_77.html

关于linux - AWK 输出中不需要的零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26997145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com