如何(内存有限)> grep -F -f file_A file_B >> output.txt

如何(内存有限)> grep -F -f file_A file_B >> output.txt

file_A(~500MB,160 万行)由所有等长搜索项组成,每行 1 个,未排序。

file_B 由所有等长文本行组成,每行 1 个,未排序

我已经能够在具有 52GB 内存的盒子上运行任何大小的 file_B 的“grep -F -f file_A file_B >> output.txt”,没有问题。问题是我现在限制为 4GB 内存,因此 file_A 的大小现在太大,无法在不耗尽可用内存的情况下运行。

除了手动将 file_A 切成更小的块之外,是否有任何简单的方法可以将其脚本编写为 grep 查找 file_A 的前 1000 行,然后在完成后自动 grep 查找第 1001-2000 行等。直到我浏览完所有 file_A?

答案1

循环遍历 file_A 块,将它们作为标准输入发送到同一个 grep 语句;将 1000 调整为您的可用内存:

nlines=$(wc -l < file_A)
chunk=1000
for((i=1; i < nlines; i += chunk)) 
do 
  sed -n $i,+$((chunk - 1))p file_A | grep -F -f - file_B
done > output

相关内容