2つのファイルの最初の列を比較し、file1の3番目の列をfile2の4番目の列に置き換えます。

2つのファイルの最初の列を比較し、file1の3番目の列をfile2の4番目の列に置き換えます。

パイプで区切られた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

今、"|"を区切り文字として使用しfile1file2.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

おすすめ記事