Awk 比较两个文件之间的四列

Awk 比较两个文件之间的四列,awk,Awk,我想将两个文件与其对应的两列$1和$2进行比较。如果file1的$1和$2与file2的$1和$2列匹配,则从file1和file2打印行,否则从file1和NA打印行 文件1 文件2 输出 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 i

我想将两个文件与其对应的两列$1和$2进行比较。如果file1的$1和$2与file2的$1和$2列匹配,则从file1和file2打印行,否则从file1和NA打印行

文件1

文件2

输出

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

你能帮我更正一下代码吗?如果你能解释一下就好了。非常感谢。

由于您不关心文件2中不在文件1中的行(如
e10 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

由于您不关心file2中不在file1中的行(如
e10 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

+1.我会用
print$0,(($1,$2)在key?key[$1,$2]:“NA\tNA\tNA”)
但是nbd。@FIROZ你可以通过接受答案来感谢他。请阅读更多详情。+1。我会用
print$0,(($1,$2)在key?key[$1,$2]:“NA\tNA\tNA”)
但是nbd。@FIROZ你可以接受答案来感谢他。请阅读更多详情。
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