在动态行上使用 Awk 进行数学计算

在动态行上使用 Awk 进行数学计算

我有一个示例文件,其值如下所示,我想计算 [] 内部分的加权平均值

6708.1717,07/15/2015,[6708:2],[6708.1609:3],[6708.5:5]
3352.130000000,07/15/2015,[3352:4]
6708.1717,07/15/2015,[6708:2],[6708.1609:2],[6708.5:5]

第一行的示例输出应该是 -

6708.1717,07/15/2015, [(6708 x 2 + 6708.1609 x 3 + 6708.5 x 5)/2+3+5]

每行带有 [] 的列数各不相同。
有没有一种方法可以用来awk计算

答案1

我会写

awk -F, -v OFS=, '{
  n=0
  sum=0
  for (i=3; i<=NF; i++) {
    split( substr( $i, 2, length($i)-2 ), a, /:/)
    sum += a[1]*a[2]
    n += a[2]
  }
  print $1, $2, sum/n
}' file

产生

6708.1717,07/15/2015,6708.3
3352.130000000,07/15/2015,3352
6708.1717,07/15/2015,6708.31

相关内容