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