使用 awk 对两列进行分组和求和

use*_*215 3 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
Run Code Online (Sandbox Code Playgroud)

例如。

北 433 145
等等

Ini*_*ian 5

很简单!只需使用两个数组即可。

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

该代码的工作原理是跳过第一条记录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
Run Code Online (Sandbox Code Playgroud)