2017-04-09 6 views
1

Wie bekomme ich aus den unten stehenden Daten die regionalen Summen von Umsatz und Kosten?Gruppieren und Summieren von zwei Spalten mit Hilfe von awk

Region Sales Cost 
North 139 35 
South 786 295 
South 312 117 
East 288 108 
North 149 56 
West 508 127 
North 145 54 
South 379 142 
East 500 188 

z.

 
North 433 145 
and so on 
+0

Was haben Sie für sich selbst versucht? – Inian

+0

Ich habe mit einem assoziativen Array zB gearbeitet. {a [$ 1] + = $ 2 und später das Array in der END-Anweisung ausdrucken. Es ergibt die Summe von Spalte 2. Nicht sicher, wie es für zwei Spalten gleichzeitig getan wird. – user1955215

Antwort

3

Einfach! Verwenden Sie nur zwei Arrays.

awk 'NR>1{uniqueSales[$1]+=$2; uniqueCost[$1]+=$3; next} 
END{for (i in uniqueSales) print i,uniqueSales[i],uniqueCost[i]}' file 

Der Code funktioniert, indem die erste Platte Skipping NR>1, wo NR ist ein spezielles variable Verfolgen der Zeilennummern jeder Zeile Awk verarbeitet. Dann erstellen wir eine Hash-Map mit dem Index $1 und zwei verschiedene Arrays uniqueSales[$1]+=$2; uniqueCost[$1]+=$3, die die Werte von $2 bzw. $3 erhöhen.

Sobald alle Zeilen verarbeitet sind. Die END-Klausel gibt die Werte aus beiden Arrays aus, um die erforderliche Ausgabe zu erhalten.

South 1477 554 
East 788 296 
North 433 145 
West 508 127 
+1

Vielen Dank für die Lösung und die Erklärung! – user1955215

Verwandte Themen