如何从没有grep -w的文件中提取精确匹配

时间:2015-04-15 08:26:54

标签: bash shell grep exact-match

我有一个带有一个列的文件A,其中包含如下字符串列表:

12
123
1234
1234567

我想使用文件A中的字符串来grep文件B中包含它们的行,文件B如下所示:

1       0/0     ./.     0/1     0/0
12      0/0     0/0     1/1     ./.
1234    1/1     0/1     ./.     0/0
12345   0/0     0/0     1/1     1/1
123456  1/1     1/1     ./.     ./.

在这种情况下,我正在等待一个完全匹配文件A中的字符串的输出,如下所示:

12      0/0     0/0     1/1     ./.
1234    1/1     0/1     ./.     0/0

我使用过grep -wf A B并且效果很好,但问题是我的真实文件很重,而且过程非常昂贵。有人有任何不同的想法来获得相同的结果,但使用其他命令行?

1 个答案:

答案 0 :(得分:2)

您可以使用此awk作为替代方法:

awk 'NR==FNR{a[$1]; next} $1 in a' file1 file2
12      0/0     0/0     1/1     ./.
1234    1/1     0/1     ./.     0/0

<强>解释

NR == FNR {                  # While processing the first file
  a[$1]                      # store the 1st field in array a
  next                       # move to next line
}
$1 in a                      # while processing the second file
                             # if 1st field is in array then print it