根据特定字符从文本文件中提取数据

根据特定字符从文本文件中提取数据

我有一个程序,它从传感器读取数据并在标准输出上打印。对我来说,有趣的数据只是 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=...
,然后仅保留数据。

相关内容