从awk中的输入文件计算百分比和等级

从awk中的输入文件计算百分比和等级,awk,scripting,Awk,Scripting,我有一个包含以下示例数据的文件: Student Name,Assignment Type,Assignment Number,Total Earned Points,Total Possible Points Chelsey,Final,FINAL,82,100 Chelsey,Survey,WS,5,5 Sam,Homework,H01,19,100 Sam,Homework,H02,82,100 A = 90 >= grade <= 100 B = 80 >= grad

我有一个包含以下示例数据的文件:

Student Name,Assignment Type,Assignment Number,Total Earned Points,Total Possible Points
Chelsey,Final,FINAL,82,100
Chelsey,Survey,WS,5,5
Sam,Homework,H01,19,100
Sam,Homework,H02,82,100
A = 90 >= grade <= 100
B = 80 >= grade < 90
C = 70 >= grade < 80
D = 60 >= grade < 70
E = grade < 60
我想计算每个学生的加权分数(总挣得分数除以总可能分数),并输出学生列表、他们的分数百分比和字母分数。字母等级表如下:

Student Name,Assignment Type,Assignment Number,Total Earned Points,Total Possible Points
Chelsey,Final,FINAL,82,100
Chelsey,Survey,WS,5,5
Sam,Homework,H01,19,100
Sam,Homework,H02,82,100
A = 90 >= grade <= 100
B = 80 >= grade < 90
C = 70 >= grade < 80
D = 60 >= grade < 70
E = grade < 60
我如何在awk中实现这一点?目前,我有一个列平均脚本

awk '
    NR>1{
        arr[$1]   += $4
        count[$1] += 1
    }
    END{
        for (a in arr) {
            print arr[a] / count[a]
        }
    }
' FILE

如果你只是想得到你提到的学生百分比(总挣得的分数除以总可能的分数),然后尝试下面的方法,尽管我不知道为什么有超过一个学生的名字,或者我们需要取他们各行的百分比,然后取平均数?我的评论中涉及了这个问题

awk '
BEGIN{
  FS=","
  print "Name    Percent Letter"
}
FNR>1{
  per=($4/$5)*100
  if(per>=90 && per<=100)   { grade="A" }
  else if(per>=80 && per<90){ grade="B" }
  else if(per>=70 && per<80){ grade="C" }
  else if(per>=60 && per<70){ grade="D" }
  else if(per<60)           { grade="E" }
  print $1,per,grade
}'   Input_file
awk'
开始{
FS=“,”
打印“姓名百分比字母”
}
FNR>1{
per=(4美元/5美元)*100

如果(per>=90&&per=80&&per=70&&per=60&&per另一个在awk中。与@RavinderSingh13的几乎相同,但这一个只检查百分比的下限(与
的顺序相同,否则如果
考虑到上限):

使用制表符分隔输出中的字段,因此,如果名称的字符数超过制表符的宽度,则输出将看起来很糟糕。在这种情况下,将输出通过管道传输到
列-t
进行清理:

$ awk ... | column -t
Name         Percent  Letter
Chelsey      82.86    B
Sammmmmmmmm  50.50    E

请解释为什么一个学生的名字是两次?以及作业栏应该如何处理?请在你的帖子中详细解释并让我们知道。同时请解释:我们是否需要计算他们各行的百分比,然后取平均值?如果你有多行学生的名字。我们需要按每个学生分组。每个学生学生有多个作业的分数,所以需要通过对每个学生对应的所有作业进行分组来计算百分比和分数。@RavinderSingh13,我如何按学生姓名对输出进行排序?++以提高速度。@JamesBrown,谢谢您,先生,是您的回答给了我明确的提示,OP需要在行中添加所有值,我试着给出它++ve但似乎你删除了它,请撤消它:)请查看我的评论以获取我的答案,不要查看编辑历史记录。:我需要按学生姓名字母顺序排列的输出,而不是按输入文件中的学生姓名顺序排列的输出。如何做?非常感谢@RavinderSingh13
$ awk ... | column -t
Name         Percent  Letter
Chelsey      82.86    B
Sammmmmmmmm  50.50    E