Macos 加速zgrep从压缩的json文件中提取匹配行

Macos 加速zgrep从压缩的json文件中提取匹配行,macos,grep,gnu-parallel,Macos,Grep,Gnu Parallel,我有大约100k个压缩的JSON文件,它们加起来大约等于100GB。所有文件都在同一目录中。我在mac os x上本地运行这个 我有几种不同的模式需要匹配,并且尝试了多种方式运行该命令,但它们都需要数小时才能完成 我从这个命令开始,从和: 这工作正常,但需要大约4小时才能完成 我尝试将其与一个或多个模式并行: find . -name "*.gz" | parallel zgrep pattern >> results/melanys.json find . -name "*.gz

我有大约100k个压缩的JSON文件,它们加起来大约等于100GB。所有文件都在同一目录中。我在mac os x上本地运行这个

我有几种不同的模式需要匹配,并且尝试了多种方式运行该命令,但它们都需要数小时才能完成

我从这个命令开始,从和:

这工作正常,但需要大约4小时才能完成

我尝试将其与一个或多个模式并行:

find . -name "*.gz" | parallel zgrep pattern >> results/melanys.json

find . -name "*.gz" | parallel zgrep -e pattern1 -e pattern2 -e pattern3 -e pattern4 >> results/melanys.json
这些确实会产生多个zgrep进程,但大多数时候它们都是空闲的,并且运行速度似乎没有加快(在单模式解决方案中),而多模式解决方案在我决定关闭它之前已经运行了8个小时

我没想到zgrep真的会花这么长时间——我希望zgrep能从这个数据集中提取出相关的行,然后将它们插入一个更适合分析的结构,也许是一个本地数据库


有没有办法加快zgrep的速度

复制100GB的文件需要几个小时才能完成,这并不奇怪。大部分时间将通过解压缩文件来消耗。如果你愿意,你可以估计

time find . -name "*.gz" | xargs zcat > /dev/null
在这种情况下,使用这些文件集几乎没有什么有用的东西可以便宜地完成。如果您的zgrep不受I/O限制,那么您可能希望从并行化中获得一些优势,但在这种情况下,最好的可能结果是机器中CPU内核数量的加速比例。在实践中,您不会看到太多的加速,如果zgrep是I/O绑定的,您也不会看到任何加速

<>您也可以考虑将数据放在更快的媒体上,例如固态驱动器或由这样的磁盘阵列组成的RAID阵列。即便如此,你也不太可能从几小时变成几分钟


无论如何,一定要尽一切努力一次提取出所有需要的数据

GNU Parallel的手册中有一节专门介绍为多个regexp对多行进行灰显:

time find . -name "*.gz" | xargs zcat > /dev/null