我想比较两个文件中的第二列。如果匹配,则将第三列的相应值从第二个文件打印到第一个文件。如果未找到匹配项,请填写“NA”
File 1
1 rs1 AA 10
1 rs2 DD 20
1 rs3 EE 30
1 rs4 RR 40
File 2
1 rs1 Pascal
1 rs4 Albinoni
Desired output
1 rs1 AA 10 Pascal
1 rs2 DD 20 NA
1 rs3 EE 30 NA
1 rs4 RR 40 Albinoni
我使用过此代码,但只输出匹配项:
awk 'NR==FNR { a[$1]=$2; next} $1 in a {print $0, a[$1]}' File2 File1
谢谢
答案 0 :(得分:3)
awk 'FNR==NR{a[$2]=$3;next}{print $0,a[$2]?a[$2]:"NA"}' file2 file1
测试如下:
> cat temp1
1 rs1 AA 10
1 rs2 DD 20
1 rs3 EE 30
1 rs4 RR 40
> cat temp2
1 rs1 Pascal
1 rs4 Albinoni
> awk 'FNR==NR{a[$2]=$3;next}{print $0,a[$2]?a[$2]:"NA"}' temp2 temp1
1 rs1 AA 10 Pascal
1 rs2 DD 20 NA
1 rs3 EE 30 NA
1 rs4 RR 40 Albinoni
>
答案 1 :(得分:3)
不完全是你想要的,但使用小工具总是很好。您可以使用join
:
$ join -1 2 -2 2 -a1 file1 file2
rs1 1 AA 10 1 Pascal
rs2 1 DD 20
rs3 1 EE 30
rs4 1 RR 40 1 Albinoni
说明:
-1 2
:使用file1
的第二个字段作为连接键-2 2
:使用file2
的seceond字段作为连接键-a1
:在file1
上留下外部联接。答案 2 :(得分:2)
awk 'NR==FNR{a[$2]=$3;next;}{print $0 " " ($2 in a ? a[$2] : "NA")}' file2 file1
输出:
1 rs1 AA 10 Pascal
1 rs2 DD 20 NA
1 rs3 EE 30 NA
1 rs4 RR 40 Albinoni