AWK关联数组中的数学计算

时间:2019-02-12 11:01:23

标签: arrays awk

我正在跟踪此链接https://stackoverflow.com/a/54599800/10220825。我想创建一个数组来存储每个键的值并进行一些数学计算,例如平均值,最大值等。 这是我的代码:

BEGIN { FS="[: ]+"}
/:/{vals[$1]=vals[$1] OFS $2+0}
END {
         for (key in vals)
         {
                c=0
                sum=0 
                print key vals[key]
                arr[c++]=vals[key]

                for(i=0;i<c;i++)
                {
                        #print arr[0]
                        sum+=sum+arr[i]
                }
                print "Sum = " sum
         }
}

但是arr不能存储vals[key]的单个值,因为vals[key]的值似乎存储为字符串。 请帮助我在awk的关联数组中进行更多研究,以便可以将vals [key]的各个值存储在数组中。 For example: for vals[RAM] I could able to create a temporary array to store individual like: arr[0]=142;arr[1]=149;arr[2]=131。创建临时数组的主要目的是计算数学计算,例如最大,最小,平均,搜索,排序等。

预期输出:

RAM 142 149 131
Sum= 422
Cache 456 152 184
Sum= 792

我的代码输出:

RAM 142 149 131
Sum= 142
Cache 456 152 184
Sum= 456

1 个答案:

答案 0 :(得分:1)

在存储时立即为每个密钥计算总和似乎是一种更好的方法。

BEGIN { FS="[: ]+" }
/:/ { vals[$1] = vals[$1] OFS $2+0; sum[$1] +=$ 2+0 }
END { for (key in vals) {
    print key vals[key]
    print "Sum= " sum[key] } }