【发布时间】:2012-12-18 01:35:39
【问题描述】:
我正在尝试做一些非常简单的事情;在目录中的文件上从列表中 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 个文件,总共 ~4000 万行 我可以看到这会很慢,但我们估计需要 7 年。即使我在我们的 HPC 上使用 300 个内核将作业按文件拆分以进行搜索,看起来也可能需要一周多的时间。
有类似的问题:
在这里,尽管它们位于不同的平台上,但我认为如果有其他可能对我有帮助的话。 或 fgrep 可能更快(但似乎有点慢,因为我现在正在测试它) 谁能看到更快的方法来做到这一点? 提前谢谢你
【问题讨论】:
-
使用
fgrep --word-regexp,除非你需要子串匹配。如果您只想知道匹配的文件名,也可以尝试fgrep --files-with-matches。 -
由于
i已经是一个变量,因此无需生成一个子shell 来将其值分配给另一个名为LOOK的变量。 -
顺便说一句,不必要的和不雅的反引号也会导致减速,尽管可能不超过总处理时间的百分之几。 partmaps.org/era/unix/award.html#backticks
-
@tripleee,我看不到反引号,你的意思是什么?
-
抱歉,我不准确地指代
$(command)(此构造的旧 Bourne 语法使用反引号)。