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

用于转换ascii数据文件的sed脚本?,sed,Sed,我曾经有办法做到这一点,但它已经失去了时间。。。我有一个程序输出一个未倾斜的ascii数据文件,另一个程序需要按自己的方式格式化数据。输出包含以下格式的X、Y数据点: X120207Y041009 X120107Y040071 etc. ... 其中每个纵坐标表示一个2.4数据点。输入文件需要这样做: X 12.0207 Y 04.1009 X 12.0107 Y 04.0071 etc. ... 文件中并非所有的行都是数据点,但以“X”开头的行具有完全相同的格式,并且在该行上不包含任何其他

我曾经有办法做到这一点,但它已经失去了时间。。。我有一个程序输出一个未倾斜的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的
字段宽度来处理固定格式的文本:

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

awk-v FIELDWIDTHS=“16”/^X/{for(X=2;xDidn’不要考虑使用gawk,这对于固定的字段宽度是完美的!谢谢Kent!
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