更快速地在循环中进行grepping

时间:2015-08-03 19:24:22

标签: string shell

我想从一个大文本文件( infile2.txt )中提取所有那些与中等大小的文本文件中找到的行匹配的行( infile1.txt )。正确的匹配应从该行的开头开始。 infile2.txt 中匹配的三行也将被提取。

以下代码会做到这一点,但速度非常缓慢:

for i in $(cat infile1.txt); do cat infile2.txt | grep -A3 ^$i >> results.txt; done &

我认为在循环的每次迭代中加载 infile2.txt 构成了瓶颈。您将采用哪些代码替代方案来加速字符串提取?

1 个答案:

答案 0 :(得分:1)

-f(来自文件的模式)标记用于grep,如下所示

grep -A3 -f infile1.txt infile2.txt > result.txt

可能会有所帮助。

如果输入是纯字符串(而不是正则表达式),那么使用-F(对于固定字符串)也可能会有所帮助。

--mmap选项也可能有一些用途,具体取决于各种因素。

除此之外,搜索速度慢的原因可能还有文件大小,磁盘速度等等。