如何使用awk将包含学生的文件拆分为数组

如何使用awk将包含学生的文件拆分为数组,awk,Awk,我有一个文件,看起来像: *students.txt* student_a OS 20 student_a EN 30 student_b OS - student_c OS - student_c EN 20 我想将其拆分为数组: student avarage maximum student_a 25 EN 30 student_b - - student_c 20 EN 20 如何仅使用AWK脚本来完成此操作 目前我只有: #!/usr/bi

我有一个文件,看起来像:

*students.txt*
student_a OS 20
student_a EN 30
student_b OS -
student_c OS -
student_c EN 20
我想将其拆分为数组:

student    avarage maximum
student_a  25      EN 30
student_b  -       -
student_c  20      EN 20
如何仅使用AWK脚本来完成此操作

目前我只有:

#!/usr/bin/awk
BEGIN {
    while ((getline line < file) > 0) {
        print line;
    }
    close(file)
}
END {}
#/usr/bin/awk
开始{
而((getline0){
打印线;
}
关闭(文件)
}
结束{}

在此之后,我不知道如何分割它。

不清楚如何处理缺少的值,但这似乎与您的输出相匹配

$ awk -v OFS='\t' 'maxValue[$1]<$3{maxValue[$1]=$3; maxName[$1]=$2}
                        ($3+0==$3){sum[$1]+=$3; count[$1]++} 
                               END{print "student","average","maximum"; 
                                   for(k in maxValue) 
                                      print k, 
                                            count[k]?sum[k]/count[k]:"-",
                                            maxName[k]" "maxValue[k]}' file | 
  column -t -s$'\t'

student    average  maximum
student_a  25       EN 30
student_b  -        OS -
student_c  20       EN 20

不清楚您如何处理缺少的值,但这似乎与您的输出相匹配

$ awk -v OFS='\t' 'maxValue[$1]<$3{maxValue[$1]=$3; maxName[$1]=$2}
                        ($3+0==$3){sum[$1]+=$3; count[$1]++} 
                               END{print "student","average","maximum"; 
                                   for(k in maxValue) 
                                      print k, 
                                            count[k]?sum[k]/count[k]:"-",
                                            maxName[k]" "maxValue[k]}' file | 
  column -t -s$'\t'

student    average  maximum
student_a  25       EN 30
student_b  -        OS -
student_c  20       EN 20

从编写awk脚本开始。如果您有问题,请在此处发布脚本和结果。问一些具体的问题,你就更有可能得到帮助。我已经添加了一些代码。谢谢,
average
25从何而来?为什么
EN
字符串出现在所需的输出中,为什么
OS
字符串不出现?使用
split
是什么意思?@Jdamian OS=
20
和EN=
30
,所以平均值是
25
…从编写awk脚本开始。如果您有问题,请在此处发布脚本和结果。问一些具体的问题,你就更有可能得到帮助。我已经添加了一些代码。谢谢,
average
25从何而来?为什么
EN
字符串出现在所需的输出中,为什么
OS
字符串不出现?你说拆分是什么意思?@Jdamian OS=
20
和EN=
30
,所以平均值是
25
…更好,但这种缩进真的没有意义。更好,但这种缩进真的没有意义。