【发布时间】:2016-08-03 04:56:26
【问题描述】:
grep -F -f file1 file2
file1 为 90 Mb(250 万行,每行一个字)
file2 为 45 Gb
该命令实际上不会产生任何东西,无论我让它运行多久。显然,这超出了 grep 的范围。
似乎 grep 无法处理来自 -f 选项的那么多查询。但是,以下命令确实会产生所需的结果:
head file1 > file3
grep -F -f file3 file2
考虑到文件大小,我怀疑 sed 或 awk 是否是合适的替代方案。
我不知所措……请帮忙。学习一些sql 命令值得吗?这简单吗?谁能指出我正确的方向?
【问题讨论】:
-
你能用
split命令把file1分成几块吗? -
SQL 命令通常不会帮助您处理原始文件。
-
@DanPichelman 如果他将模式文件分成 100 份,他必须与 45G 怪物一起玩 100 次..这没关系...**并且**他必须删除重复的匹配行.因为 grep -f 执行“OR”....我不知道它是否更快。
-
你在什么操作系统上运行?我对
grep -F -f listFile的体验是您会收到一条错误消息,上面写着listFile too big(或类似的)。嗯...其他读者...-f listFile不是一个排序文件吗? ?此外,虽然 SQL 可以解决这个问题,但安装 SQL、cfged 等需要很长的设置时间。如果您制作一个定期运行的生产流程,可能值得花时间投资,但可能不在您的项目时间表。祝你好运! -
你可以只做 cat file2,因为如果你从一个文件中 grep 出 250 万个单词,最终几乎所有的行都会显示出来 :)
标签: unix scripting grep large-files