有什么方法可以让grep进程更快?

时间:2014-11-06 07:01:14

标签: performance grep

我正在使用grep -v来解析目标文件中不存在于所需文件中的字符串,但是这个过程耗时太长(> 12小时)并且最终被机器杀死而没有完成任务。

我使用的命令:

grep -v -f desire.txt target.txt >> no_in_desire_file.txt

desire.txt有45502个字符串; target.txt有268101个字符串。

有人可以和我分享你加速grep过程的经验吗?不幸的是,我在Python或Perl方面并不擅长。

更新:

@ John1024的建议提高了grep进程的速度。

  

如果它只包含普通字符串,则添加-F选项以进行修复   字符串。这大大加快了grep。 - John1024

1 个答案:

答案 0 :(得分:2)

如果您匹配的字符串不是正则表达式,则可以通过指定grep' -F选项来实现大幅加速。

grep能够以非常复杂和强大的正则表达式的形式处理模式。例如,考虑一下:

$ echo mississippi | grep -E 'm(.*is)+.*i'
mississippi

在这种情况下,grep会查找字母m,后跟一个或多个字符组,其中包含任意数量的字符,后跟is,后跟任意数量的字符字符,然后是i。计算这样的匹配可能非常复杂。

但是,在您的情况下,您的模式是简单的字符串,如:

comp100014_c0
comp0_c0_seq1

对于这些字符串,我们正在寻找简单匹配。这不需要花哨的计算。为了加快grep,我们可以告诉它我们的字符串都很简单。我们通过指定-F选项来完成此操作。在man grep中,此功能记录为:

  

-F, - 固定字符串
  将PATTERN解释为固定列表   由换行符分隔的字符串,其中任何一个都要匹配。 (-F是   由POSIX指定。)