并行grep模式多个文件

时间:2014-02-25 11:06:37

标签: bash parallel-processing grep gnu-parallel

我正在使用此命令成功搜索:从日志目录(压缩文件)中的txt文件ips.txt中搜索可疑IP列表。

root@yop# find /mylogs/ -exec zgrep -i -f ips.txt {} \; > ips.result.txt

我现在想用它来使用 parallel 来加快搜索速度。 我目前无法找到正确的args。我的意思是使用模式文件(每行一个)并将其导出到结果文件中。

请问平行大师吗?

我发现越接近的命令是这样的: grep-or-anything-else-many-files-with-multiprocessor-power

但无法将其与模式文件列表一起使用并将结果导出到文件中......

请帮助,谢谢大家。

2 个答案:

答案 0 :(得分:4)

如果您只想一次运行多个作业,请考虑使用GNU parallel

parallel zgrep -i -f ips.txt :::: <(find /mylogs -type f) > results.txt

答案 1 :(得分:0)

如何循环文件,然后将每个文件放入后台作业?正如Mark评论的那样,如果你有大量的日志文件,这可能不合适。还假设您没有运行任何其他背景。

mkdir results

for f in "$(find /mylogs/)"; do 
    (zgrep -i -f ips.txt "$f" >> results/"$f".result &); 
done

wait

cat results/* > ip.results.txt
rm -rf results

您可以使用 head 和/或 tail 限制要搜索的文件数,例如只搜索前50个文件:

for f in "$(find /mylogs/ | head -50)"; do...

然后是下一个50:

for f in "$(find /mylogs/ | head -100 | tail -50)"; do...

等等。