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

おすすめ記事