서로 다른 데이터 블록의 열 행을 곱하고 더해 평균을 구하시겠습니까?

서로 다른 데이터 블록의 열 행을 곱하고 더해 평균을 구하시겠습니까?

나는 다음과 같은 큰 데이터 덩어리를 가지고 있습니다.

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)이고 이것이 두 번째 P(P 7.5169 3.54172 2.77681)라면... (9.44657×7.5169) + (-0.840×3.541) + (-0.394× 2.77) ...두 번째 P와 세 번째 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}'

관련 정보