2017-04-09 240 views
1

如何从下面的数据中获得区域方面的销售和成本总计?使用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 

例如,

 
North 433 145 
and so on 
+0

你为自己做了什么? – Inian

+0

我曾与一个关联数组例如。 {a [$ 1] + = $ 2,然后在END语句中输出数组。它给出了第2列的总和。不知道如何对两列同时进行。 – user1955215

回答

3

简单!,只需使用两个数组。

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

代码工作通过跳过第一记录NR>1,其中NR是每行Awk正在处理的行号的一个特殊的变量保持跟踪。然后我们创建散列映射,索引是$1和两个不同的阵列uniqueSales[$1]+=$2; uniqueCost[$1]+=$3,其分别递增来自$2$3的值。

一旦处理完所有行。 END子句打印来自两个数组的值以获取所需的输出。

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

感谢解决方案和解释! – user1955215

相关问题