Como filtrar logs entre um intervalo de tempo

0

Aqui está o meu formato de registro (simplificado para demonstração)

2018-04-12 14:43:00.000 ERROR hello
2018-04-12 14:44:01.000 ERROR world
2018-04-12 14:44:03.000 INFO this is a multi-line log
NOTICE THIS LINE, this line is also part of the log
2018-04-12 14:46:00.000 INFO foo

Então, como filtrar o log de [2018-04-12 14:44:00.000, 2018-04-12 14:45:00.000) para produzir a seguinte saída?

2018-04-12 14:44:01.000 ERROR world
2018-04-12 14:44:03.000 INFO this is a multi-line log
NOTICE THIS LINE, this line is also part of the log
    
por aLeX 13.04.2018 / 04:00

2 respostas

0

Você pode fazer isso com sed

sed -n '/2018-04-12 14:44:00.000/,/2018-04-12 14:45:00.000/p' log_file

Vale a pena notar que isso corresponderá apenas à primeira instância, apenas usa as datas como um delimitador para imprimir entre elas.

Coisa semelhante pode ser obtida com awk :

awk '/^2018-04-12 14:44:00.000.*/,/2018-04-12 14:45:00.000.*/' log_file
    
por 13.04.2018 / 08:45
0

Se você quiser apenas linhas específicas entre um certo tempo, então awk funcionará. Para dar um leve tutorial

Para começar e descobrir quais linhas você deseja:

cat -n logfile

Isso mostrará o conteúdo do arquivo com os números de linha.

Para imprimir os números de linha desejados:

awk 'NR==2,NR==4' logfile

Isso imprime o intervalo entre as linhas 2 e 4.

Se você deseja imprimir mais duas linhas ou um intervalo de linhas que não são consecutivas, caso queira, pode separá-las com || ou ;

awk 'NR==5,NR==10;NR==15,NR==20' logfile

Passando para imprimir as linhas entre um determinado intervalo de tempo, combine o acima com grep grep :

cat -n logfile | grep -e '2018-04-12 14:44:01.000' -e '2018-04-12 16:46:00.000' | awk NR==5,NR==10

grep -e permite que várias strings sejam retornadas. Adicione -e para cada string. Isso irá imprimir as linhas com o início e fim do intervalo de tempo (eu mudei o final para um momento posterior para incluir mais linhas), juntamente com o seu número de linha. Você pode então usar awk para imprimir o intervalo entre e incluindo as duas linhas.

Você pode pegar tudo isso como um exemplo e modificá-lo para atender às suas necessidades de arquivos de log e o que deseja imprimir de acordo com os horários.

    
por 13.04.2018 / 04:20