AWK: ¿es posible desglosar un archivo de registro por un campo distinto && por hora

Pregunta

Estoy tratando de averiguar si es posible conawk solo para pasar un archivo de registro y luego tenerawk genera un mensaje distinto con un desglose de la hora (00-23), así como un recuento, para esa hora particular frente a un mensaje distinto.

EjemploSalida solicitada
Message1
00 13
01 30
...
23 6

Message2
00 50
01 10
...
23 120
etc, etc

El archivo de entrada se vería un poco como el siguiente:

blah,blah
2016-06-24 00:30:54 blah Message1 7 rand rand2
2016-06-24 00:40:12 blah Message2 35 rand rand2
2016-06-24 00:42:15 blah Message2 12 rand rand2
2016-06-24 00:58:01 blah Message1 5 rand rand2
2016-06-24 00:58:12 blah Message2 3 rand rand2
2016-06-24 01:02:25 blah Message2 2 rand rand2
2016-06-24 01:02:30 blah Message1 3 rand rand2
2016-06-24 01:05:14 blah Message1 10 rand rand2
2016-06-24 01:30:56 blah Message2 5 rand rand2
2016-06-24 01:55:41 blah Message2 3 rand rand2
blah, blah

Tenga en cuenta que este es un archivo de entrada inventado.

Para obtener la salida solicitada de este archivo de entrada, sé que necesitaréprint $4 entonces en una nueva línea haz algo comoprint substr($2,1,2)" "sum[$5]. Por las mismas horas por lo mismo$4 Tendré que agregar el$4estan juntos.

Código

También tenga en cuenta que tengo que usarawk 3.1.7, así que no puedo hacer ninguna de las nuevas cosas elegantes que sonawk 4.1.0+.

Sé cómo obtener los mensajes distintos.

{
msg[$4]++
}
END {
  for (m in msg) {
     print m;
   }
}

Para devolver la hora, ¿podría hacer algo como:

{
msg[$4]++
hr[$4] = substr($2,1,2)
}
END {
  for (m in msg) {
     print m;
     print hr[m];
   }
}

Y finalmente, para la suma, sería algo similar a:

{
msg[$4]++
hr[$4] = substr($2,1,2)
sum[$4] += $5
}
END {
  for (m in msg) {
     print m;
     print hr[m]" "sum[m];     
   }
}

Cualquier ayuda es muy apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta