命令使用awk只输出1行

时间:2013-11-25 15:44:37

标签: bash awk matching

我有两个文件:

文件1:

rs3094315 1 0 742429 G A
rs12124819 1 0 766409 G A
rs2272756 1 0 871896 A G
rs3128126 1 0 952073 G A
rs3934834 1 0 995669 A G
rs3766192 1 0 1007060 G A

文件2:

rs12565286 1 0 711153 C G
rs12138618 1 0 740098 A G
rs3094315 1 0 742429 G A
rs3131968 1 0 744055 A G
rs12562034 1 0 758311 A G
rs2905035 1 0 765522 A G
rs12124819 1 0 766409 G A
rs2980319 1 0 766985 A T
rs4040617 1 0 769185 G A
rs2980300 1 0 775852 T C
rs4951864 1 0 787889 C T
rs12132517 1 0 788664 A G
rs950122 1 0 836727 C G
rs2272756 1 0 871896 A G
rs3128126 1 0 952073 G A
rs3121561 1 0 980243 T C
rs3813193 1 0 988364 C G
rs4075116 1 0 993492 C T
rs3934834 1 0 995669 T C
rs3766193 1 0 1007033 C G
rs3766192 1 0 1007060 C T
rs3766191 1 0 1007450 T C

这些文件显示后,第一列中的文件有更多匹配,两个文件中大约有500k行。 我正在尝试使用以下命令在第一列(rs ####)中查找匹配项,如果找到,则将匹配项放在新文件夹中的一行上。

 awk 'NF==FNR{s=$1; a[s]=$0; next} a[$1]{print $0" "a[$1]}' file1 file2 > mergedfiles

但是,这个命令只在mergedfiles中给出1个匹配(如下所示),我只是无法弄清楚出了什么问题。这可能非常简单:s。如果您能够解决此问题,请提前致谢。

rs3766192 1 0 1007060 C T rs3766192 1 0 1007060 G A

1 个答案:

答案 0 :(得分:3)

使用:

NR==FNR

您的条件只会获取第六行(因为第一个文件中有6个字段)!