系统相关
首页 > 系统相关> > linux – 如何(内存限制)> grep -F -f file_A file_B >> output.txt

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

作者:互联网

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

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

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

如果没有手动将file_A切换成较小的bite,有没有简单的方法来编写这个grep文件的前1000行file_A,然后当它们自动grep为1001-2000行时,等等.直到我完成了所有的file_A?

解决方法:

循环遍历file_A的块,将它们作为stdin发送到同一个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

标签:linux,grep,scripting,text-processing,shell-script
来源: https://codeday.me/bug/20190816/1671422.html