zgrep 是否重用最近未压缩​​的文件?

zgrep 是否重用最近未压缩​​的文件?

我正在zgrep一个目录中的 for 循环中调用 *.gz 文件。

由于日志文件很大(每个大约 1GB,大约 30 个文件),该命令需要很长时间。

/tmp我在zgrep 正在创建的文件夹中看到几个未压缩的文件。

我想知道,是否可以zgrep重用它自己的未压缩文件?或者它每次都会解压缩它们(即 for 循环的下一次迭代)?

该脚本确实

#!/bin/bash

while read -r request;
do
    zgrep $request */log.prefix.* | grep ..... <complex command>
read < /tmp/allRequestIds.txt

有关优化 zgrep 的任何提示吗?

答案1

zgrep PATTERN FILE本质上是相同的zcat FILE | grep PATTERN或者是其一些变体。如果您循环运行它,它将不会重用以前未压缩的文件。

为了加快处理速度,允许zgrep直接从文件中读取模式/tmp/allRequestIds.txt

zgrep -f /tmp/allRequestIds.txt */log.prefix.*

如果您想要固定字符串模式匹配而不是正则表达式匹配,也可以使用-F

zgrep -F -f /tmp/allRequestIds.txt */log.prefix.*

答案2

尝试ripgrep它具有兼容的语法,grep并且更强大,因为它是用它建立在Rust 的正则表达式引擎它使用有限自动机、SIMD 和积极的文字优化来使搜索速度非常快。检查详细分析看这里

用法示例:

rg -z "pattern" .

-z/--search-zip搜索压缩文件(gzbz2xzlzma)。

相关内容