使用awk分组和求和两列数据

3
以下是如何从下面的数据中获取销售和成本的区域总计?
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

例如:

北 433 145
等等 

我曾经使用过一个关联数组,例如 {a[$1]+=$2} ,然后在 END 语句中打印该数组。它可以给出第二列的总和。但不确定如何同时计算两列。 - user1955215
1个回答

5

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接