我正在跟踪此链接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
答案 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] } }