如何使用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
…更好,但这种缩进真的没有意义。更好,但这种缩进真的没有意义。