比较两个文件之间的四列

时间:2014-04-23 16:45:32

标签: awk

我想将两个相应的列$ 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

你能不能纠正我的代码,如果你能解释它会很好。非常感谢。

1 个答案:

答案 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
相关问题