CRで区切られた文字列を複数行に分割し、各行にIDを追加する方法は?

CRで区切られた文字列を複数行に分割し、各行にIDを追加する方法は?

次のように、内部キャリッジリターンで区切られた行を含むファイルがあります。

電磁パルス|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

おすすめ記事