我想提取所有$file1
以存储在$file2
.
$file1
大小为 4 GB,约有 2000 万行,$file2
有 200 万行,大小约为 140 MB,包含两列,用,
. 这两个文件的最大行长度远低于 1000,它们按顺序排序,LC_ALL=C
并且$file1
可以包含除\0
.
没想到这个命令
parallel --pipepart -a $file1 grep -Ff $file2
消耗大量内存并被操作系统杀死。
如果我限制线程数,该命令有效:
parallel --pipepart -j 8 -a $file1 grep -Ff $file2
对于最后一个命令,htop 显示每个grep -Ff $file2
-thread 始终占用 12.3 GB 的内存。我假设这个需求来自字典 grep 构建于$file2
.
我怎样才能更有效地实现这样的过滤器?
它包含在
man parallel
https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Grepping-n-lines-for-m-regular-expressions