我想从一个大文本文件( infile2.txt )中提取所有那些与中等大小的文本文件中找到的行匹配的行( infile1.txt )。正确的匹配应从该行的开头开始。 infile2.txt 中匹配的三行也将被提取。
以下代码会做到这一点,但速度非常缓慢:
for i in $(cat infile1.txt); do cat infile2.txt | grep -A3 ^$i >> results.txt; done &
我认为在循环的每次迭代中加载 infile2.txt 构成了瓶颈。您将采用哪些代码替代方案来加速字符串提取?
答案 0 :(得分:1)
将-f
(来自文件的模式)标记用于grep
,如下所示
grep -A3 -f infile1.txt infile2.txt > result.txt
可能会有所帮助。
如果输入是纯字符串(而不是正则表达式),那么使用-F
(对于固定字符串)也可能会有所帮助。
--mmap
选项也可能有一些用途,具体取决于各种因素。
除此之外,搜索速度慢的原因可能还有文件大小,磁盘速度等等。