각 열의 데이터 양이 동일하지 않은 경우 현명하게 합산하는 방법은 무엇입니까?

각 열의 데이터 양이 동일하지 않은 경우 현명하게 합산하는 방법은 무엇입니까?

나는 각 열의 평균을 계산하기 위해 이 awk 스크립트를 사용하고 있습니다. 각 열의 데이터 포인트가 동일하면 스크립트가 제대로 작동합니다. 누구든지 이 스크립트를 수정하는 데 도움을 줄 수 있다면.
열의 데이터 포인트는 다음과 같습니다(샘플 파일이지만 실제 파일에는 10000쿨롱이 포함되어 있음).

1 3 4 5   
2 3 5 6  
5 4 5 6  
6 6 6  
7 7  
8   
{
    for(i=1; i<=NF; i++) {
        a[i]+=$i
        if($i!="")
            b[i]++}
    }
END {
    for(i=1; i<=NF; i++)
        printf "%s%s", a[i]/b[i], (i==NF?ORS:OFS)
}

답변1

반복 중이며 NF마지막 입력 행에 도달하면 1뿐입니다. 배열의 길이를 반복적으로 계산해야 합니다.

또한 공간으로 구분된 데이터 구조를 살펴보면 빈 변수가 없으므로 둘 중 하나 if를 테스트 할 필요가 없습니다.

awk '{
    for(i=1; i<=NF; i++) {
        a[i]+=$i; b[i]++
    }
END {
    for(i=1; i<=length(a); i++)      #<-----iterate over length(a) not NF
        printf "%s%s", a[i]/b[i], (i==length(a)?ORS:OFS)
}' file

@kusalananda의 의견에 따르면, 귀하의 awk버전이 이러한 방식으로 배열 길이 결정을 지원하지 않는 경우 입력 중 최대 필드 수를 찾아야 합니다.

awk '{max = (max < NF) ? NF : max;
    for(i=1; i<=NF; i++) {
        a[i]+=$i; b[i]++}
    }
END {
    for(i=1; i<=max; i++)
        printf "%s%s", a[i]/b[i], (i==max?ORS:OFS)
}' file

관련 정보