Стандартное отклонение awk

Я пытаюсь определить стандартное отклонение для набора оценок учащихся по различным предметам. Я просто немного застрял на последнем вычислении, которое мне нужно сделать, и я просто не уверен, в чем проблема.

BEGIN {
    i=0
    printf("\nResults for form 6B\n")
    }         
$1=="SUBJECT" {
        i++
        subject[i]=$2
    total[i]=0
    count[i]=0
    printf("\nLits of %s Students\n",subject[i])
    printf("Name         Mark    Pass/Fail\n")
    printf("----         ----    ---------\n")
    }
NF>2 {  mark[i] = ($3+$4)/2 
    student=$2" "$1
    total[i] = total[i]+mark[i]
    count[i] = count[i]+1
    if (mark[i]>49)
        result="Pass"
        else
        result="Fail"
    printf("%-14s%-3d%10s \n",student, mark[i], result)
    }
END {  top = i
        printf("\nSubject        Mean     Standard Deviation\n") 
        printf("-------        ----     ------------------\n")
    var=0
    for(i=1;i<=top;i++){
        mean[i]=total[i] / count[i]

        var+=((mark[i]-mean[i])^2) #Standard deviation not working#
        stdev=sqrt(var/count[i])

        printf("%16-s%-3d%12d \n",subject[i],mean[i],stdev) 
        }
    }

Забыл добавить входной файл "отметки"

FORM    6B
SUBJECT Maths  
Smith   John    40  50 
Evans   Mike    50  80 
SUBJECT Physics
Jones   Tom 35  65
Evans   Mike    46  76
Smith   John    34  56
SUBJECT Chemistry
Jones   Tom 50  60
Evans   Mike    30  40

Выходные данные, которые я получаю это математика 7 физика 7 химия 11

Правильные значения 10 6 10

1 ответ

Посмотри на gawk печатная документация. Следующее проиллюстрирует, что происходит:

$ awk 'BEGIN { printf "%%d:%d %%i:%i %%f:%f %%s:%s\n", 3.8, 3.8, 3.8, 3.8}'

%d:3 %i:3 %f:3.800000 %s:3.8

Так, %i а также %d пол поплавок. Вы можете указать, как будет выглядеть число в %f с некоторыми модификаторами.

Другие вопросы по тегам