grep -F -f file1 file2
Run Code Online (Sandbox Code Playgroud)
file1是90 Mb(250万行,每行一个字)
file2是45 Gb
无论我让它运行多久,该命令实际上都不会产生任何结果.显然,这超出了grep的范围.
似乎grep无法处理来自该-f选项的那么多查询.但是,以下命令确实产生了所需的结果:
head file1 > file3
grep -F -f file3 file2
Run Code Online (Sandbox Code Playgroud)
考虑到文件大小,我怀疑sed或awk是否也是合适的替代方案.
我不知道其他选择......请帮忙.学习一些sql命令是否值得?这简单吗?谁能指出我正确的方向?
我正在调整这里提出的现有perl脚本: grep -f的快速替代
我需要过滤许多非常大的文件(Map文件),每个文件大约1000万行x 5个字段宽,使用一个长列表(过滤文件)和匹配的地图文件中的打印行.我尝试使用grep -f,但它只是花了太长时间.我读到这种方法会更快.
这就是我的文件的样子:
过滤文件:
DB775P1:276:C2R0WACXX:2:1101:10000:77052
DB775P1:276:C2R0WACXX:2:1101:10003:51920
DB775P1:276:C2R0WACXX:2:1101:10004:36433
DB775P1:276:C2R0WACXX:2:1101:10004:57256
Run Code Online (Sandbox Code Playgroud)
地图文件:
DB775P1:276:C2R0WACXX:2:1101:10000:70401 chr5 21985760 21985780 -
DB775P1:276:C2R0WACXX:2:1101:10000:77052 chr18 14723904 14723924 -
DB775P1:276:C2R0WACXX:2:1101:10000:77052 chr18 14745586 14745606 -
DB775P1:276:C2R0WACXX:2:1101:10000:77052 chr4 7944241 7944261 -
DB775P1:276:C2R0WACXX:2:1101:10000:77052 chr4 8402856 8402876 +
DB775P1:276:C2R0WACXX:2:1101:10000:77052 chr8 10864708 10864728 +
DB775P1:276:C2R0WACXX:2:1101:10002:88487 chr17 5681227 5681249 -
DB775P1:276:C2R0WACXX:2:1101:10004:74842 chr13 2569168 2569185 +
DB775P1:276:C2R0WACXX:2:1101:10004:74842 chr14 13253418 13253435 -
DB775P1:276:C2R0WACXX:2:1101:10004:74842 chr14 13266344 13266361 -
Run Code Online (Sandbox Code Playgroud)
我希望输出行看起来像这样,因为它们包含map和filter文件中的字符串.
DB775P1:276:C2R0WACXX:2:1101:10000:77052 chr18 14723904 14723924 -
DB775P1:276:C2R0WACXX:2:1101:10000:77052 chr18 14745586 14745606 -
DB775P1:276:C2R0WACXX:2:1101:10000:77052 chr4 7944241 7944261 -
DB775P1:276:C2R0WACXX:2:1101:10000:77052 …Run Code Online (Sandbox Code Playgroud)