用于转换ascii数据文件的sed脚本?

时间:2017-09-19 14:16:26

标签: sed

我曾经有办法做到这一点,但它已经失去了时间...我有一个程序输出一个未倾斜的ascii数据文件,另一个程序需要数据格式化它自己的方式。输出包含以下格式的X,Y数据点:

X120207Y041009
X120107Y040071
etc. ...

其中每个纵坐标表示2.4数据点。输入文件需要它:

X 12.0207 Y 04.1009
X 12.0107 Y 04.0071
etc. ...

并非文件中的所有行都是数据点,但以“X”开头的行具有完全相同的格式,并且在该行上不包含任何其他内容。

我所有寻找类似的转换都指向使用sed作为一种快速,优雅的方式来做到这一点,但我从未学过sed。我想在实际编写一个c程序来进行这种转换之前,这似乎是一种非常难以重新创建的方法。如果有人可以救我,我会欠你一个百吉饼!

1 个答案:

答案 0 :(得分:0)

您可以使用gawk的FIELDWIDTHS来处理固定格式的文本:

awk -v FIELDWIDTHS="1 6 1 6" '/^X/{for(x=2;x<=5;x+=2)sub(/../,"&.",$x)}7' file

让我们看一个例子:

kent$  cat f
X120207Y041009
X120107Y040071
we want to leave it, no matter what it is

kent$  awk -v FIELDWIDTHS="1 6 1 6" '/^X/{for(x=2;x<=5;x+=2)sub(/../,"&.",$x)}7' f
X 12.0207 Y 04.1009
X 12.0107 Y 04.0071
we want to leave it, no matter what it is