我正在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
搜索压缩文件(gz
、bz2
、xz
和lzma
)。