연속되지 않은 행을 기준으로 열의 평균을 구합니다.

연속되지 않은 행을 기준으로 열의 평균을 구합니다.

다음과 같은 파일이 여러 개 있습니다.

38
CVBR1 14.8804 -24.6979
CVBV1 16.1739 -22.9142
CVBV2 16.1376 -22.8745
CVBV4 16.0818 -22.8148
CVBV5 16.0028 -22.7777
CVBV6 16.1640 -22.7128
CVFG1 14.8981 -24.4886
CVFG2 15.0135 -24.4262
CVFG3 15.0450 -24.3434
CVFG4 14.8876 -24.2931
CVFG5 14.8898 -24.4072
CVMA1 15.2288 -23.2110
CVMA2 15.1347 -23.1612
CVMA3 15.1441 -23.1216
CVMA4 15.2699 -23.1733
CVSA1 17.1328 -25.0427
CVSA2 17.2023 -25.0928
CVSA3 17.1647 -25.0973
CVSA4 17.1062 -25.2434
CVSA5 17.0208 -25.1670
CVSA6 16.9569 -25.3100
CVSL1 16.6008 -22.8977
CVSL2 16.7091 -22.9402
CVSL3 16.7633 -22.8944
CVSL4 16.7578 -22.9826
CVSN1 16.6497 -24.3205
CVSN2 16.6219 -24.3465
CVSN3 16.6199 -24.2929
CVSN4 16.6135 -24.1318
CVST1 15.0150 -23.5251
CVST2 15.0525 -23.6041
CVST3 15.0983 -23.6659
CVST4 15.2299 -23.7426
CVST5 15.1186 -23.5200
CVSV1 16.8864 -24.9228
CVSV2 16.8748 -25.0198
CVSV3 16.8518 -25.0361
CVSV4 16.8464 -24.8741
CVMA3 CVSA6
16.9569 -25.3100
3.6722
.03092
CVMA3 CVSV3
16.8518 -25.0361
3.4578
.04678
CVSA6 CVST3
15.0983 -23.6659
2.7588
.02963

처음 39개 행은 모든 파일에서 정확히 동일합니다. 3.6722+3.4578+2.7588+(그만큼)/그만큼의 평균을 계산하고 싶습니다.

나는 다음을 수행했습니다.

for file in in_tomo_*
do
npaths=$((($nlinhas - 39) / 4))
echo $npaths
average=$(echo | awk 'BEGIN{SUM=0}{{if NR>=39 && (NR+3)%4==0} SUM+=$1}END{print SUM/'$npaths'}' $file)
echo $average
done

답변1

awk 'FNR == 1 { skip = $1 } FNR > skip && FNR%4 == 2 { sum += $1; ++n } END { print sum/n }' file

첫 번째 줄에서 흥미로운 데이터를 얻을 때까지 건너뛸 줄 수를 선택합니다. 흥미로운 데이터는 4개 라인의 모든 그룹 중 세 번째 라인에서 발견됩니다. 이 데이터는 1씩 추가되고 sum증가 됩니다. n마지막에는 합계를 다음으로 나눈 값이 n출력되어 우리가 선택한 모든 값의 평균이 산출됩니다.

주어진 예에서는 3.29627.

관련 정보