linux - 如何将 Parallel Grep 的输出附加到文件中?

标签 linux bash parallel-processing grep bigdata

我有一个 500 MB 的文件和一个 20MB 的模式文件。由于从 500 万行文件中 grep 120 万个模式需要花费太多时间,因此我将模式文件分成 100 个部分。 我尝试使用以下多种模式并行运行 Grep。

for pat1 in vailtar_*
do
    parallel --block 75M --pipe grep $pat1 infile >> outfile
done;

但我无法将输出附加到文件中。我尝试不使用阻止选项,如下所示 -

cat infile | parallel --block 75M --pipe grep $pat1 >> outfile
< infile parallel --block 75M --pipe grep $pat1 >> outfile

是否有办法使并行 grep 将输出附加到文件中? 提前致谢。

最佳答案

这样也许效果会更好?

for pat1 in vailtar_*
do
    parallel --block 75M --pipe grep -f $pat1 < infile
done > outfile

这将从 for 循环内的所有内容中获取所有输出,并将其放入 outfile 中。

顺便说一句,我认为您打算使用 infile 作为标准输入,而不是作为 grep 的参数,并且我认为您打算使用 -f $pat,而不是只是文件名作为模式。我已在我的版本中解决了这两个问题。


但是,如果我试图解决这个问题,我可能会这样做:

parallel 'grep -f {} infile' ::: vailtar_*

(我没有测试过。)

关于linux - 如何将 Parallel Grep 的输出附加到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25204533/

相关文章:

c# - .NET 任务并行库

python - 从 python 脚本并行运行 bash 脚本

linux - 通过 shell 脚本安装程序;找不到程序?

linux - Affectiva 每两帧下降一次

linux - Git 不会忽略文件权限更改

bash - 如何为字符串中的每个单词添加单引号

c# - Durable Orchestrator 在 Task.WhenAll 之后卡住

java - eclipse.ini 已更改,但 eclipse 不会在 Ubuntu 14.04 中更新

mysql - 错误: database is uninitialized and password option is not specified

linux - 为什么 Bash 字符串下标中的空格在这里很重要?