CRで区切られた文字列を複数の行に分割し、新しい各行にIDを追加するにはどうすればよいですか?

Phaneendra Pavuluri

以下のように、行が内部キャリッジリターンによって分割されているファイルがあります。

EMP | 123 | 10 \ r INFO | JOHN | SMITH | M | 01/12/1980 \ r ADDR | 125 | BRIDGE RD | COLUMBUS | OH 
EMP | 456 | 10 \ r INFO | DAVID | PIRT | M | 02/12 / 1980 \ r ADDR | 257 | BRIDGE RD | COLUMBUS | OH 
EMP | 789 | 10 \ r INFO | JENN | MCKENZI | F | 03/12/1980 \ r ADDR | 389 | BRIDGE RD | COLUMBUS | OH

CR間の行の部分は、さらに文字で区切られていることに注意してください|

CR文字で各行を別々の行に分割したいと思います。次に、新しい各行(つまり、CRを改行文字に置き換えて形成された行|)は、元の行のID(2番目に区切られたフィールド)で始まる必要があります

期待される出力:

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

これどうやってするの?

スティールドライバー

どうですか

$ 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

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ