AWK - Ist es möglich, eine Protokolldatei nach einem bestimmten Feld aufzuteilen && nach Stunden

Frag

Ich versuche herauszufinden, ob es mit @ möglich iawk allein in einer Protokolldatei übergeben und dann habenawk gibt eine eindeutige Nachricht mit einer Aufschlüsselung der Stunden (00-23) sowie einer Zählung für diese bestimmte Stunde gegen eindeutige Nachricht aus.

BeispieAusgabe angefordert
Message1
00 13
01 30
...
23 6

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

Die Eingabedatei würde ungefähr so aussehen:

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

Bitte beachten Sie, dass dies eine erfundene Eingabedatei ist.

Um die angeforderte Ausgabe aus dieser Eingabedatei zu erhalten, weiß ich, dass ichprint $4 dann in einer neuen Zeile etwas wieprint substr($2,1,2)" "sum[$5]. Für die gleichen Stunden für das gleiche$4 Ich muss das @ hinzufüg$4 ist zusammen.

Cod

Beachten Sie auch, dass ich @ verwenden muawk 3.1.7 also kann ich nichts von dem ausgefallenen neuen Zeug machen, das @ iawk 4.1.0 +.

Ich weiß, wie ich die einzelnen Nachrichten erhalte.

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

Um die Stunde zurückzugeben, könnte ich etwas in folgender Weise tun:

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

Und schließlich für die Summe wäre es etwas in der Art von:

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

Any und jede Hilfe wird sehr geschätzt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage