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

时间:2017-04-09 14:33:00

标签: awk

如何从以下数据中获得销售额和成本的区域总数?

#include <vector>

...

class classe1
{
    public:
        classe1(int value) :
            obj2 (value)
        {
        }
    private:
        std::vector<classe2> obj2;
};

例如

North 433 145
and so on 

1 个答案:

答案 0 :(得分:4)

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

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