パイプで区切られた2つのファイル間の最初の列を比較し、一致する場合は、ファイル1の3番目の列をファイル2の4番目の列に置き換える必要があります。
ファイル1:
111|xyz|23345
222|abc|123
333|xyz|45667
444|xyz|5432
555|xyz|8976
ファイル2:
111|xyz|344|rtms
222|abc|222|xyzw
666|xyz|ggg|abde
888|xyz|ff|nnnn
333|xyz|dd|abde
444|xyz|vv|nnnn
555|xyz|bbb|uuyytt
結果ファイル:
111|xyz|rtms
222|abc|xyzw
333|xyz|abde
444|xyz|nnnn
555|xyz|uuyytt
ベストアンサー1
awk
一時ファイルが不要な1行:
join -t '|' -j1 -o 1.1 1.2 2.4 <(sort -t'|' -k1,1 file1) <(sort -t '|' -k1,1 file2)
join
そして次のすべてを使用してくださいawk
。
まずfile2
、最初のフィールドに基づいてソートして保存します。file2.sort
sort -k 1 file2 > file2.sort
今、"|"を区切り文字として使用しfile1
、file2.sort
。次に、「|」を区切り文字として使用して、必要な列を抽出しますawk
。
join -t '|' file1 file2.sort | awk -F "|" ' {print $1"|"$2"|"$6}'
出力は次のとおりです。
ron@ron:~$ join -t '|' file1 file2.sort | awk -F "|" ' {print $1"|"$2"|"$6}'
111|xyz|rtms
222|abc|xyzw
333|xyz|abde
444|xyz|nnnn
555|xyz|uuyytt