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
Was haben Sie für sich selbst versucht? – Inian
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