以下のように、行が内部キャリッジリターンによって分割されているファイルがあります。
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]
コメントを追加