1

さまざまな科目の学生のマークのセットの標準偏差を計算しようとしています。私が行う必要がある最後の計算に少し固執しているだけで、何が問題なのかわかりません。

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 です

4

1 に答える 1

0

gawkprintfドキュメントを見てください。以下は、何が起こっているかを示しています。

$ 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

于 2015-07-14T14:13:09.303 に答える