O zgrep reutiliza arquivos descompactados recentemente?

1

Estou chamando arquivos zgrep over * .gz em um loop for em um diretório.

Como os arquivos de log são enormes (cerca de 1GB cada e cerca de 30 arquivos), o comando está demorando muito.

Eu vejo vários arquivos descompactados na pasta /tmp , que o zgrep está criando.

Gostaria de saber se zgrep reutiliza seus próprios arquivos descompactados? Ou ele os descompacta a cada vez (ou seja, a próxima iteração do loop for)?

O script faz

#!/bin/bash

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

Alguma dica sobre como otimizar o zgrep?

    
por mtk 12.03.2018 / 15:20

2 respostas

2

zgrep PATTERN FILE é essencialmente o mesmo que zcat FILE | grep PATTERN ou alguma variação do mesmo. Ele não reutilizará arquivos previamente descompactados se você executá-lo em um loop.

Para acelerar o processamento, permita que zgrep leia os padrões diretamente do arquivo /tmp/allRequestIds.txt :

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

Se você quiser correspondência de padrão de sequência fixa em vez de correspondência de expressão regular, use também -F :

zgrep -F -f /tmp/allRequestIds.txt */log.prefix.*
    
por 12.03.2018 / 15:35
0

Experimente ripgrep que tem sintaxe compatível com grep e é mais poderoso, pois está escrito em Rust e é construído em cima de Regex engine do Rust que usa autômatos finitos, SIMD e otimizações literais agressivas para tornar a busca muito rápida. Verifique a análise detalhada aqui .

Exemplo de uso:

rg -z "pattern" .

-z/--search-zip Search in compressed files (gz, bz2, xz, and lzma).

    
por 13.04.2018 / 01:14