Buscar y filtrar texto en archivos de registro grandes

Buscar y filtrar texto en archivos de registro grandes

Utilizo los comandos tail, head y grep para buscar archivos de registro. La mayoría de las veces la combinación de estos 3 comandos, además de usar pipe, hace el trabajo. Sin embargo, tengo este registro al que muchos dispositivos informan literalmente cada pocos segundos. Entonces este registro es muy grande. Pero el patrón de presentación de informes es el mismo:

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

En el ejemplo anterior, muestra que el paquete UDP se envió al servidor de socket para una identificación de unidad específica.

Ahora, a veces quiero ver la información del paquete para esta unidad dentro de un rango de tiempo específico consultando el registro.

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

Entonces, en el ejemplo anterior, me gustaría mostrar la salida del registro solo para el ID de unidad: 1111 dentro del rango de tiempo de 11:58 y 23:58. Entonces los posibles resultados pueden verse así:

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 los resultados solo muestran información de ID de unidad: 1111 y no las otras unidades.

Ahora el problema con el uso de algo como esto:

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

es que mostrará muchas cosas, no solo las que necesito.

Respuesta1

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

información relacionada