bash – 在大型数据集上使用grep或fgrep进行非常慢的循环
发布时间:2020-12-16 01:36:45 所属栏目:安全 来源:网络整理
导读:我正在尝试做一些非常简单的事情;来自列表的grep,对于字符串的完全匹配,对目录中的文件: #try grep each line from the filesfor i in $(cat /data/datafile); do LOOK=$(echo $i);fgrep -r $LOOK /data/filestosearch /data/output.txtdone 与grep匹配的文
我正在尝试做一些非常简单的事情;来自列表的grep,对于字符串的完全匹配,对目录中的文件:
#try grep each line from the files for i in $(cat /data/datafile); do LOOK=$(echo $i); fgrep -r $LOOK /data/filestosearch >>/data/output.txt done 与grep匹配的文件有2000万行,目录有~600个文件,共有~40万行 有类似的问题: Loop Running VERY Slow Very slow foreach loop 虽然它们位于不同的平台上,但我想可能还有其他可能对我有所帮助.
听起来像grep的-f标志在这里是合适的:
-f FILE,--file=FILE Obtain patterns from FILE,one per line. The empty file contains zero patterns,and therefore matches nothing. (-f is specified by POSIX.) 所以grep已经可以做你的循环正在做的事情了,你可以用以下代码替换循环: grep -F -r -f /data/datafile /data/filestosearch >>/data/output.txt 现在我不确定2000万个模式的性能,但至少你没有以这种方式启动2000万个进程,所以它可能要快得多. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |