次のように、内部キャリッジリターンで区切られた行を含むファイルがあります。
電磁パルス|123|10\アル字型情報|ジョン|スミス|M|1980/01/12\アル字型住所オハイオ州ブリッジロード| 電磁パルス|456|10\アル字型情報|デビッド|パット|M|1980/02/12\アル字型住所オハイオ州ブリッジロード| 電磁パルス|789|10\アル字型情報|ジェーン|マッケンジー|F|1980/03/12\アル字型住所オハイオ州ブリッジロード|
CR 間の行部分は|
文字でさらに区切られます。
CR文字で各行を別々の行に分割したいです。それからそれぞれ新しい行(つまり、CRを改行文字で置き換えた行)は、|
元の行(2番目の区切りフィールド)のIDで始まる必要があります。
予想出力:
EMP|123|10
123|INFO|JOHN|SMITH|M|01/12/1980
123|ADDR|125|BRIDGE RD|COLUMBUS|OH
EMP|456|10
456|INFO|DAVID|PIRT|M|02/12/1980
456|ADDR|257|BRIDGE RD|COLUMBUS|OH
EMP|789|10
789|INFO|JENN|MCKENZI|F|03/12/1980
789|ADDR|389|BRIDGE RD|COLUMBUS|OH
IDが繰り返されるので、出力の3行で構成される各セットが同じ(1)入力行に属することがわかります。
次のコマンドを試しましたが、CRを新しい行に置き換えました。新しい行にIDを追加する方法がわかりません。
tr '\r' '\n' < test.txt > new.txt
出力:
EMP|123|10
INFO|JOHN|SMITH|M|01/12/1980
ADDR|125|BRIDGE RD|COLUMBUS|OH
EMP|456|10
INFO|DAVID|PIRT|M|02/12/1980
ADDR|257|BRIDGE RD|COLUMBUS|OH
EMP|789|10
INFO|JENN|MCKENZI|F|03/12/1980
ADDR|389|BRIDGE RD|COLUMBUS|OH
どうすればいいですか?
ベストアンサー1
どうですか?
$ awk -F '\r' '{
print $1;
split($1,a,"|");
for(i=2;i<=NF;i++) print a[2] "|" $i;
}' file
EMP|123|10
123|INFO|JOHN|SMITH|M|01/12/1980
123|ADDR|125|BRIDGE RD|COLUMBUS|OH
EMP|456|10
456|INFO|DAVID|PIRT|M|02/12/1980
456|ADDR|257|BRIDGE RD|COLUMBUS|OH
EMP|789|10
789|INFO|JENN|MCKENZI|F|03/12/1980
789|ADDR|389|BRIDGE RD|COLUMBUS|OH