比较 2 个文件中的第一列,并将文件 1 的第三列替换为文件 2 的第四列

比较 2 个文件中的第一列,并将文件 1 的第三列替换为文件 2 的第四列

我需要比较 2 个管道分隔文件之间的第一列,如果它们匹配,我需要将文件 1 中的第三列替换为文件 2 中的第四列。

文件一:

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临时文件的一行:

join -t '|' -j1 -o 1.1 1.2 2.4 <(sort -t'|' -k1,1 file1) <(sort -t '|' -k1,1 file2)

同时使用joinawk

首先,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

相关内容