AWK: ¿es posible desglosar un archivo de registro por un campo distinto && por hora
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.
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$4
estan juntos.
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.