awk '$3 >= "11:58" && $3 <= "23:58" && /Unit ID: 1111/{print l"\n"$0};{l=$0}'
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.