2016-04-27 6 views
1

Hier ist ein Beispiel für eine Zeile von Log:Wie gruppiere ich mit bash scripting nach zwei Feldern?

2016-04-24 23:59:45 -1 6bd3fbb8-65ac-4d16-bf32-48659a76c499 2   +15173583107 14  +161760555935 14  de.xxxx-O2 layxxxd 0 1 

Ich weiß, wie von einer eingereicht Gruppe, so ist dies die Lösung:

awk '{arr[$11]+=$12} END {for (i in arr) {print i,arr[i]}}' exmaple.log 

und dies würde Ergebnisse sein:

xx 144 
layxxxd 49.267 

Meine Frage ist, dass wie kann ich durch zwei Felder statt einer gruppieren, zuerst sollte $11 sein und zweitens ist $10? So sollten die Ergebnisse ändern:

layxxxd unknown 100 
layxxxd de.xxxx-O2 44 
+1

so etwas wie dies versuchen: 'awk‚{arr [11 $ 12 $] + = $ 12} END {for (i in arr) { print ich, arr [i]}} 'exmaple.log' – ritesht93

+0

@ ritesht93 nein, niemals' arr [$ 11 $ 12] ... ', da es verschiedene Kombinationen der Felder in die gleiche Index-Zeichenkette verwandelt. z.B. $ 11 = "a" und $ 12 = "bc" würden den gleichen Array-Index "abc" wie $ 11 = "ab" und $ 12 = "c" erzeugen. Siehe [@ Anubhavas Antwort] (http://stackoverflow.com/a/36885254/1745001) für einen gültigen Ansatz. –

+1

@EdMorton Oh ja danke .. Das ist ein gültiger Punkt :) – ritesht93

Antwort

2

wie kann ich Gruppe von zwei Feldern statt einem ersten $11 sein sollte, und die zweite ist $10?

Sie $11 FS $10 als Schlüssel für assoziatives Array verwenden können:

awk '{arr[$11 FS $10] += $12} END {for (i in arr) {print i,arr[i]}}' exmaple.log 
Verwandte Themen