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

标签 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 

最佳答案

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

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 正在处理。然后我们创建一个 hash-map,索引为 $1 和两个不同的数组 uniqueSales[$1]+=$2; uniqueCost[$1]+=$3 分别增加 $2$3 的值。

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

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

关于awk - 使用awk对两列进行分组和求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43307935/

相关文章:

linux - 如何在同一文件中添加行数

使用 grep 和 awk 的 BASH FOR 循环

multithreading - 如何使 sed 匹配多行模式

bash - 如何更改文件中的字符串,但将更改保存在另一个文件中,而不是原始文件中?

python - 在python中将指数转换为小数

bash - 使用awk计算时间差

bash - 如何使用awk修改文件?

linux + 什么是合并文件的最佳方式

linux - 文件中的 awk 命令在循环中执行时出错

linux - 计数每行出现的次数