AWK - Ist es möglich, eine Protokolldatei nach einem bestimmten Feld aufzuteilen && nach Stunden
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.
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.
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.