Como faço para filtrar um log apenas para as linhas entre duas vezes?

5

Estou trabalhando no Unix.

Gostaria de buscar informações de um log em um intervalo de tempo especificado para a data atual. Por exemplo, eu quero os dados de um arquivo de log da data de hoje, das 00:00 às 09:00.

Entrada de registro de amostra:

13/10/16 14:45:02 <batchspeedchange> <BELLBD.BD77350A.G6987V00> <> FAILED FILE FORMAT VALIDATION - ERROR:-213:rawData cannot contain tokens

Como faço para obter a saída de tal arquivo de log?

    
por Gopalakrishnan 28.10.2013 / 17:30

2 respostas

6

Assumindo que as datas pareçam "HH: MM" como você mostra, e assumindo que a data aparece no 2º campo, você pode usar o awk:

awk -v start=00:00 -v stop=09:00 'start <= $2 && $2 < stop' file.log

[rant] Eu sou muito especial sobre a formatação de datas, e esta é terrível: qual é a data "09/10/11"? [/ rant]

De qualquer forma, assumindo isso "AA / MM / DD"

awk -v date="$(date +%y/%m/%d)" \
    -v start=00:00:00 \
    -v stop=09:00:00 \
    -v search="File format not found" \
'$1 == date && start <= $2 && $2 < stop && $0 ~ search' file.log
    
por 28.10.2013 / 18:34
0

Supondo que as linhas no arquivo de log estão em ordem cronológica e que há um evento às 00:00 e 00:09:

awk '/^13\/10\/16 00:00/,/^13\/10\/16 09:00/ {print}' file.log

Eu acho que o acima é fácil de lembrar e uma ótima ferramenta para investigar logs. As suposições são muito amplas para uso em produção.

    
por 28.10.2013 / 21:34

Tags