1

我有一个文件 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,效果很好,但问题是我的真实文件非常重,而且过程非常昂贵。有人有任何不同的想法来获得相同的结果,但使用其他命令行?

4

1 回答 1

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
于 2015-04-15T08:35:16.260 回答