私は次のような大きなデータの塊を持っています。
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}'