Стандартное отклонение 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
с некоторыми модификаторами.