用于转换ASCII数据文件的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程序进行此转换之前,这似乎是重新创建的非常困难的方法。如果有人可以保释我,我欠你一个百吉饼!

您可以使用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

最新更新