Pesquisar e filtrar texto em arquivos de log grandes

2

Eu uso os comandos tail, head e grep para pesquisar arquivos de log. Na maioria das vezes, a combinação desses 3 comandos, além de usar pipe, faz o trabalho. No entanto, eu tenho esse log que muitos dispositivos relatam literalmente a cada poucos segundos. Então esse log é muito grande. Mas o padrão do relatório é o mesmo:

Oct 10 11:58:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0xD 0xD 0xD 
Oct 10 11:58:50 Unit ID: 1111

No exemplo acima, ele mostra que o pacote UDP foi enviado para o servidor de soquete para um ID de unidade específico.

Agora, às vezes, quero ver as informações do pacote dessa unidade em um intervalo de tempo específico, consultando o log.

Oct 10 11:58:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0xD 0xD 0xD 
Oct 10 11:58:50 Unit ID: 1111

... // A bunch of other units reporting including unit id 1111

Oct 10 23:58:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0x28 0x28 0x28 
Oct 10 23:58:50 Unit ID: 1111

Portanto, no exemplo acima, gostaria de exibir a saída do log apenas para o ID da unidade: 1111 dentro do intervalo de tempo de 11:58 e 23:58. Então, os resultados possíveis podem ser assim:

Oct 10 11:58:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0xD 0xD 0xD 
Oct 10 11:58:50 Unit ID: 1111

Oct 10 12:55:11 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0x28 0xD 0x28 
Oct 10 12:55:11 Unit ID: 1111

Oct 10 15:33:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0x33 0xD 0x11 
Oct 10 15:33:50 Unit ID: 1111

Oct 10 23:58:50 Received Packet from [xxx.xx.xxx.xx:xxxx]: 0x28 0x28 0x28 
Oct 10 23:58:50 Unit ID: 1111

Observe que os resultados exibem apenas ID da unidade: 1111 informações e não as outras unidades.

Agora, o problema de usar algo assim:

tail -n 10000 | grep -B20 -A20 "Oct 10 23:58:50 Unit ID: 1111" 

é que irá mostrar muitas coisas, não apenas as coisas que eu preciso.

    
por JohnMerlino 10.10.2013 / 18:14

1 resposta

3
awk '$3 >= "11:58" && $3 <= "23:58" && /Unit ID: 1111/{print l"\n"$0};{l=$0}'
    
por 11.10.2013 / 21:40