전체 프로그램

전체 프로그램

dataset.csv7개의 숫자 열이 포함된 대용량 데이터 파일이 있습니다. AWK가 각 열의 평균과 분산을 계산하는 가장 빠르고 효율적인 방법이라는 것을 읽었습니다. CSV 파일을 반복하고 결과를 요약 CSV로 출력하려면 AWK 명령이 필요합니다. 예시 데이터세트:

1   1   12  1   0   0   426530
1   1   12  2   0   0   685455
3   4   12  3   1   0   1182080
1   1   12  4   0   1   3090
2   1   13  5   0   0   386387
1   3   12  6   0   2   233430
3   1   11  7   1   0   896919
1   1   12  8   0   0   16441

생성된 요약 csv는 아래와 같습니다. 첫 번째 행은 각 열의 평균에 해당하고 두 번째 행은 분산(표본 기반)입니다.

1.625   1.625   12  4.5 0.25    0.375   478791.5
0.839285714 1.410714286 0.285714286 6   0.214285714 0.553571429 1.74812E+11

단일 열 값을 계산할 수 있었지만 모든 열에 대해 반복하려면 이 값이 필요합니다.

awk -F' ' '{ total += $1 } END {print total/NR}' dataset.csv > output.csv

답변1

모든 열에 루프가 필요합니다

{ for(i=1;i<=NF;i++) ...

그리고 배열

... total[i]+=$i ; sq[i]+=$i*$i ; }

결과적으로 (평균적으로) 유사한 명령줄이 생성됩니다.

awk '{ for(i=1;i<=NF;i++) total[i]+=$i ; } 
    END { for(i=1;i<=NF;i++) printf "%f ",total[i]/NR ;}' 

전체 프로그램

평균과 분산을 계산하기 위해 awk를 사용했지만 결과를 얻지 못했습니다.

 { for(i=1;i<=NF;i++) {total[i]+=$i ; sq[i]+=$i*$i ; } }
END {

   for(i=1;i<=NF;i++) printf "%f ",total[i]/NR ;
   printf "\n" ;
   for(i=1;i<=NF;i++) printf "%f ",sq[i]/NR-(total[i]/NR)**2 ;
   printf "\n" ;
}

답변2

"C" 방법,문서. 아마도 효율적이거나 깨끗하지는 않지만 읽기가 더 쉬울 것입니다. NxM 공백으로 구분된 요소를 포함하는 데이터 파일의 각 열의 평균과 분산을 계산합니다.

#!/bin/awk -f

BEGIN { } {
    if (max_nf < NF)
        max_nf = NF
    max_nr = NR
    for (x = 1; x <= NF; x++)
        mat[x, NR] = $x
} END {
    for (x = 1; x <= max_nf; x++) {
        mean = 0.0
        var = 0.0
        for (y = 1; y <= max_nr; y++) {
            var += (y - 1) * (mat[x, y] - mean) * (mat[x, y] - mean) / y
            mean += (mat[x, y] - mean) / y
        }
        printf("%f %f\n", mean, var / (max_nr - 1))
    } 
}

예제를 실행하세요:

./ColVarAndMean.awk dataset.csv > output.dat && cat output.dat 
1.625000 0.839286 
1.625000 1.410714 
12.000000 0.285714 
4.500000 6.000000 
0.250000 0.214286 
0.375000 0.553571 
478791.500000 174812449479.714294 

답변3

awk -F ',' '{print;x+=$2}END{print "MEAN" x/NR}' filename.csv

두 번째 열 은 $2변수에 값을 저장할 수 있는 NR레코드 수 입니다.$2x

관련 정보