2017-09-19 4 views
-1

私はこれを行う方法を持っていましたが、時間がなくなりました...私は、未調整のASCIIデータファイルを出力するプログラムと、それ自身の方法でフォーマットされたデータを必要とする別のプログラムを持っています。出力には、ASCIIデータファイルを変換するためのsedスクリプト?

X120207Y041009 
X120107Y040071 
etc. ... 

の形式のX、Yデータポイントが含まれます。これらの各縦座標は2.4データポイントを表します。入力ファイルは、次のようなことが必要です。

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

ないファイルの行のすべてのデータポイントですが、「X」で始まるされているものは、まったく同じフォーマットを有し、かつその上何もが含まれていませんライン。

私が似たようなコンバージョンを探しているのは、これをすばやくエレガントにする方法としてsedを使う点ですが、私はsedを学んだことはありません。私は実際にこの変換を行うためのCプログラムを書く前に思っていますが、再作成するのは本当に難しい方法のようです。もし誰かが私を救済することができたら、私はあなたにベーグルを借りよう!

答えて

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 
+0

はそれが固定されたフィールド幅と完璧だ、gawkの使用を考えていませんでした!感謝のケント! – inagadadavida

関連する問題