Cenário:
Eu tenho um arquivo chamado abcd.log.gz.
Quero zcat apenas os arquivos com duração de 17:30:00 a 18:30:00.
Atualmente, eu zcat o arquivo inteiro. Em seguida, ative os logs entre dois períodos de tempo que acredito serem pesados em termos de armazenamento e tenho que continuar executando rm
comandos, o que é um risco indesejado.
Script para calcular logs entre dois períodos de tempo.
#!/bin/bash
# Check if three arguments are provided
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <beg_time> <end_time> <log_file>"
exit 1
fi
beg=$1
end=$2
log_file=$3
LC_ALL=C awk -v beg="$beg" -v end="$end" '
match($0, /[0-2][0-9]:[0-5][0-9]:[0-5][0-9]/) {
t = substr($0, RSTART, 8)
if (t >= end) selected = 0
else if (t >= beg) selected = 1
}
selected' "$log_file"
Não,
zcat
em geral o arquivo não exige muito armazenamento (a menos que você grave a saída completa em um arquivo, o que não seria para o qual você usaria o zcat).Então, basta canalizar a saída do zcat para o seu awk, em vez de primeiro gravar em um arquivo e depois ler esse arquivo.