異なるデータブロックの列行を掛けて加算して平均を求めますか?

異なるデータブロックの列行を掛けて加算して平均を求めますか?

私は次のような大きなデータの塊を持っています。

924
777 777 777 8445.65349
P 9.44657 -0.840283 -0.394467
C 4.0555 -0.683104 -1.70917
P 7.5169 3.54172 2.77681
C 3.21536 2.67146 2.20242
P 4.33641 7.62012 6.10004
C 0.851002 3.61045 5.6153
P -0.884031 7.93847 9.1465

これは他のブロックが始まるまで続く。

C -2.60284 -2.72416 5.53391
P -7.1821 -5.0307 2.45961
C -4.15764 -0.916509 2.41971
P -7.95623 -0.58521 -2.00452
C -3.06671 0.655337 -1.24124    <-- (here is the end of first chunk)
924                             <-- (here another section starts)
777 777 777 8175.13598
P 9.77168 -2.01085 -0.577195
C 5.1768 -1.76539 -1.75107
P 7.16094 2.89923 2.55963
C 2.93574 1.47131 2.21471
P 3.93407 7.32403 5.62331

P各行の項目を次の行にP連続して乗算し、一緒に加算して平均を求めたいと思います。

たとえば、

これが最初のP(P 9.44657 -0.840283 -0.394467)であり、これが2番目のP(P 7.5169 3.54172 2.77681)の場合... (9.44657×7.5169) + (-0.840×7.2最初のPと3番目のPについてこの操作を繰り返してから、それを加算して平均を取得し、同じパターンに従う多くのデータ塊に対してこれを行います。

これを行うために使用できますかawk

ベストアンサー1

P以下は、この生産ラインから始まるすべての要素の生産合計と数量を再度受け取るのに役立ちます。

awk '/^P/{for (n=2;n<=NF;n++){sum+=arr[n]*$n;arr[n]=$n;t++}} END{print sum t}'

どういうことなのかはよくわかりませんが、chunks総ファイル数ではなく分割してもらいたい場合は、手順を次のように自由に修正してください。

awk '/^924$/ && sum != 0 {print sum t; sum=0; t=0} \
     /^P/{for (n=2;n<=NF;n++){sum+=arr[n]*$n;arr[n]=$n;t++}} \
     END{print sum t}'

おすすめ記事