gpt4 book ai didi

bash - 在大型数据集上使用 grep 或 fgrep 循环非常慢

转载 作者:行者123 更新时间:2023-11-29 08:59:54 35 4
gpt4 key购买 nike

我正在尝试做一些非常简单的事情; 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 个内核按文件拆分作业进行搜索,看起来也可能需要一周多的时间。

还有类似的问题:

Loop Running VERY Slow:

Very slow foreach loop

虽然它们在不同的平台上,但我认为 if else 可能对我有帮助。或 fgrep 这可能更快(但似乎有点慢,因为我现在正在测试它)谁能看到更快的方法来做到这一点?提前谢谢你

最佳答案

听起来 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 万个进程,所以它可能要快得多。

关于bash - 在大型数据集上使用 grep 或 fgrep 循环非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14143163/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com