Pesquise e filtre texto em arquivos de log grandes

Pesquise e filtre texto em arquivos de log grandes

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 o pipe, dá conta do recado. No entanto, tenho esse registro que muitos dispositivos reportam literalmente a cada poucos segundos. Então esse log é muito grande. Mas o padrão dos relatórios é 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, mostra que o pacote UDP foi enviado ao servidor de soquete para um ID de unidade específico.

Agora, às vezes, quero visualizar as informações do pacote desta unidade dentro de 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, eu gostaria de exibir a saída de log apenas para Unit ID: 1111 dentro do intervalo de tempo de 11h58 e 23h58. Portanto, 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 informações de ID da unidade: 1111 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 isso exibirá muitas coisas, não apenas as que eu preciso.

Responder1

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

informação relacionada