我想将两个相应的列$ 1和$ 2的两个文件进行比较。如果file1的1美元和2美元与文件2的列$ 1和$ 2匹配,则从file1和file2打印行,否则从file1和NA NA NA打印行
文件1
a 12
b 13
c 14
d 15
e 16
file2的
b 13 p1
c 14 p2
e 10 k3
e 16 k4
输出
a 12 NA NA NA
b 13 b 13 p1
c 14 c 14 p2
d 15 NA NA NA
e 16 e 16 k4
我已编写此程序,但它只能与第1列,
列进行比较 awk 'BEGIN{FS=OFS="\t"} FNR==NR {a[$1]=$0; next}
{ t=($1 in a)?a[$1]:"NA"OFS"NA"OFS"NA"OFS"NA"; print t,$0}' file1 file2
你能不能纠正我的代码,如果你能解释它会很好。非常感谢。
答案 0 :(得分:4)
由于您不关心file2中不在file1中的行(如e 10 k3
),因此反过来处理文件:
awk '
NR==FNR {key[$1,$2]=$0; next}
{
if (($1,$2) in key) print $0, key[$1,$2]
else print $0, "NA","NA","NA"
}
' file2 file1