【问题标题】:Mathematical computation in associative array in awkawk中关联数组中的数学计算
【发布时间】:2019-07-06 00:17:02
【问题描述】:

我正在关注此链接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。创建临时数组的主要目的是计算数学计算,如 max、min、avg、搜索、排序等。

预期输出:

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

我的代码输出:

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

【问题讨论】:

  • 这看起来像 Awk,而不是 Bash。
  • edit 您的问题包括您希望从中获得预期输出的示例输入。可以参考其他问题等,但请确保该问题独立存在。

标签: arrays awk


【解决方案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] } }

【讨论】:

  • 我希望以一般方式计算其他函数,例如 max 、min、avg、排序等。
  • 那么 awk 并不是真正适合做这个的工具。
猜你喜欢
  • 2020-12-11
  • 2013-10-10
  • 2021-03-23
  • 2013-02-04
  • 2014-06-21
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多