我有一个程序,它从传感器读取数据并在标准输出上打印。对我来说,有趣的数据只是 X、Y 和 Z 值:
[2021-05-07 10:47:41.993] [info] Acceleromter (avrg 100): X=+6696.080 Y=-5577.230 Z=-5813.550
[2021-05-07 10:47:42.249] [info] Acceleromter (avrg 100): X=+6692.000 Y=-5580.190 Z=-5808.080
[2021-05-07 10:47:42.506] [info] Acceleromter (avrg 100): X=+6694.200 Y=-5582.050 Z=-5811.460
[2021-05-07 10:47:42.763] [info] Acceleromter (avrg 100): X=+6690.390 Y=-5578.800 Z=-5812.100
[2021-05-07 10:47:43.020] [info] Acceleromter (avrg 100): X=+6691.930 Y=-5580.140 Z=-5808.930
[2021-05-07 10:47:43.277] [info] Acceleromter (avrg 100): X=+6693.400 Y=-5578.180 Z=-5805.930
我将输出重定向到一个文件:
$program >> data.txt
现在我想将其提取到另一个文件中,如下所示:
+6693.400 -5578.18 -5805.930
这仅仅是 X、Y 和 Z 的值,以空格或制表符作为分隔符。
我尝试过 cut、awk 和一些其他的东西,但我完全不知道我在做什么......我只是不擅长这些东西。任何帮助都将非常有帮助。
答案1
我假设空格(或制表符)和=
字符不能“随机”出现,因此它们是很好的分隔符。如果是这样,则此awk
命令将起作用:
awk -F '[\t =]' '{print $8 OFS $10 OFS $12}'
默认OFS
值为空格。在此格式中,处理纯文本,因此从中-5578.180
您将获得-5578.180
,而不是-5578.18
。
(有办法去掉尾随零。您所需的输出省略了第二个值(Y)中的尾随零,但没有省略其他值中的尾随零,所以我不确定您是否真的想要这个。我保持答案简单。
使用awk
如下命令:program | awk …
;或者如下:<data.txt awk …
。
答案2
使用 Gawk:
awk -F'[XYZ]=' '{print $2 $3 $4}' data.txt
这里 FS 是 X=、Y= 或 Z=。
假设它们不能出现在数据的第一部分。
使用 sed :
sed -E 's/.*((.=.*){3})/\1/;s/.=//g' data.txt
首先仅保留 X=..., Y=...
,然后仅保留数据。