我需要比较 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)
同时使用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