
awk '{for ( a=2a<=(NF+1)a++ ){sum=sum+$a}}{print $1,sum/(NF-1)sum=0}' /test/student.data | sort -k2 -r | awk 'BEGIN{A[1]="A"A[2]="B"A[3]="C"A[4]="D"A[5]="E"A[6]="F"}{print A[NR]":",$0}'
(2)每个科目的平均分(从上至下平均分分别是数据中从左至右科目的)
#!/bin/bash
for (( i=2i<=(NR+1)i++ ))
do
awk '{sum+=$'$i'}END{print sum/NR}' /test/student.data
done
(2)-1班级总平均分
awk '{for ( a=2a<=(NF+1)a++ ){sum=sum+$a}}END{print sum/(NF-1)}' student.data
y:root:/tmp/ss> cat xx44.datjasper: 80 82 84 84 88 92
andrea: 85 89 90 90 94 95
oellis: 89 90 92 96 96 98
mona: 70 70 77 83 85 89
john: 78 85 88 91 92 94
dunce: 60 60 61 62 64 80
y:root:/tmp/ss> ./xx44
Total 6 Average 83
jasper: 80 82 84 84 88 92 average 85(B)
andrea: 85 89 90 90 94 95 average 90.5(A)
oellis: 89 90 92 96 96 98 average 93.5(A)
mona: 70 70 77 83 85 89 average 79(C)
john: 78 85 88 91 92 94 average 88(B)
dunce: 60 60 61 62 64 80 average 64.5(D)
high: 4 low: 2
A - 2
B - 2
C - 1
D - 1
y:root:/tmp/ss> cat xx44
#!/bin/bash
awk 'BEGIN{
sum=0
}
function getmark(s)
{
if(s<60)
mark="F"
else if(s>=60 && s<70)
mark="D"
else if(s>=70 && s<80)
mark="C"
else if(s>=80 && s<90)
mark="B"
else if(s>=90)
mark="A"
return mark
}
{
name[NR]=$1
subtotal[$1]=0
for(i=2i<=NFi++){
score[$1,i]=$i
subtotal[$1]+=$i
}
average[$1]=subtotal[$1]/(NF-1)
sum+=average[$1]
}
END{
allav=sum/NR
locount=0
hicount=0
printf("Total %d Average %d\n\n", NR, allav)
for(key in name) {
printf("%s\t", name[key])
for(i=2i<=NFi++)
printf("%s ", score[name[key],i])
printf("average %s(%s)\n",
average[name[key]],
getmark(average[name[key]]))
if(average[name[key]] >= allav)
hicount++
else
locount++
markcnt[getmark(average[name[key]])]++
}
printf("\n")
printf("\nhigh: %s low: %s\n", hicount, locount)
for(key in markcnt)
printf("%s - %s\n", key, markcnt[key])
}' xx44.dat
1)总分:awk 'END {print ($2+$3+$4+$5)/4}' score说明,第一行,如NUM,math在做数值运算中,做0计算的。
各个成绩记录在文件 score中。
2)计算各个学生的成绩:
示例计算3241的平均成绩,awk '{if ($1=="3241") print ($2+$3+$4+$5)/4}' score
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)