学生成绩表单如下:

 Name,Team,First Test, Second Test, Third Test
Tom,Red,,,
Joe,Green,,,
Maria,Blue,,,
Fred,Blue,,,
Carlos,Red,-,,
Phuong,Green,,,
Enrique,Green,,,
Nancy,Red,,,24

编写一个awk脚本用来计算每个人的平均成绩,每次测试的平均成绩和没组队的平均成绩。如果某次成绩为负数,则表示此人错过了测试,那计算平均成绩时排除此人再计算。输出的格式如下,在名字的列表中,名字是10个宽度且左对齐(提示printf中使用%-10s格式),而平均值是7个字符宽度,右边两个右对齐的小数。

 Name       Average
---- -------
Tom 14.67
Joe 13.00
Maria 15.00
Fred 13.33
Carlos 19.50
Phuong 15.67
Enrique 13.00
Nancy 15.00
------------------
Average for Test :
Average for Test : 15.75
Average for Test : 22.125
-------------------
Average for Red Team:
Average for Blue Team: 14.1667
Average for Green Team: 13.8889

脚本如下:

 awk -F, 'BEGIN{
printf "%-10s %s\n","Name","Average"
printf "%-10s %s\n","----","-------"
}
NR>{
sum=
n=
for (i=;i<=;i++){
if ($i>){
n++
sum=sum+$i
testcount[i-]++
testtotal[i-]+=$i
teamcount[$]++
teamtotal[$]+=$i
}
}
printf "%-10s %7.2f\n",$,sum/n
}
END{
print "------------------"
for (j=;j<=;j++){
print "Average for Test "j" : "testtotal[j]/testcount[j]
}
print "-------------------"
for (t in teamcount){
print "Average for "t" Team: "teamtotal[t]/teamcount[t]
}
}' teamlist.txt

解析:

1.awk的BEGIN语句输出表的两个列名。

2.NR>1表示只处理从第二行开始的数据。

3.sum=0,n=0,初始化三个测试总成绩和参加的次数。

4.定义一个for循环,循环处理三次测试数据。

5.判断成绩大于0才处理此次测试。

6.为计算每个人的平均成绩,用变量n记录测试次数,变量sum累计三次的成绩,接着下面用printf格式化输出每个人的平均成绩;为计算三个测试中每次的平均成绩,以i-2作为索引(即i-2次测试),数组testcount记录某次测试参加的人数,数组testtotal记录某次测试的总成绩;为计算每个组的平均成绩,以第二列组名做为索引,数组teamcount记录某组参加测试的人数,数组teamtotal记录某组的总成绩。

7.在END语句中用两个for循环语句分别输出每次测试及每组测试的平均成绩。

  

利用awk处理学生成绩问题(难度较大)的更多相关文章

  1. C语言利用结构体数组实现学生成绩管理系统

    这篇文章主要为大家详细介绍了C语言利用结构体数组实现学生成绩管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 要求: 某班有最多不超过30人(具体人数由键盘输入) ...

  2. Java课程设计—学生成绩管理系统(201521123004-林艺如)

    1.团队课程设计博客 团队课程设计博客链接 2.个人负责模块或任务说明 ①.Menu Menu.jsp 在页面中给出提示,用HTML的 MenuTeacher.jsp 利用Menu.jsp进行具体化完 ...

  3. 基于MFC的学生成绩管理系统的设计与实现

    1.技术介绍MFC是微软基础类库的简称,是微软公司实现的一个C++类库,主要封装了大部分的WINDOWS API函数,并且包含一个应用程序框架,以减少应用程序开发人员工作量.VC++是微软公司开发的C ...

  4. C语言文件实现学生成绩管理

    C语言实现学生成绩管理 项目简介 用C语言的链表及文件操作实现学生成绩的管理,实现主要的添加.修改.删除.查询的主要功能,并在程序关闭时将数据存储在二进制的文件中并加密.下一次打开程序,先解密二进制文 ...

  5. C项目实践--学生成绩管理系统

    1.功能需求分析 学生成绩管理系统是对学生基本信息及成绩的管理.本程序主要实现了对学生的学号.姓名等基本信息以及各项学科成绩进行增加.删除.修改.查询和保存到磁盘文件等操作.主要功能描述如下: (1) ...

  6. R_Studio(学生成绩)对数据缺失值md.pattern()、异常值分析(箱线图)

    我们发现这张Gary.csv表格存在学生成绩不完全的(五十三名学生,三名学生存在成绩不完整.共四个不完整成绩) 79号大学语文.高等数学 96号中国近代史纲要 65号大学体育 (1)NA表示数据集中的 ...

  7. Java学生成绩绩点管理系统

    一.考试要求: 1.按照测试内容要求完成程序的设计与编程: 2.建立学号姓名文件夹,如:“信 1805-1 班 20180001 XXX”,将源程序文件保存在文件夹中,压缩成 rar 文件提交. 3. ...

  8. PTA 学生成绩链表处理(C语言)

    本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node *createlist(); struct ...

  9. Java开学测试-学生成绩管理系统

    题目: 1.定义 ScoreInformation 类,其中包括七个私有变量(stunumber, name, mathematicsscore, englishiscore,networkscore ...

随机推荐

  1. Dreamweaver 1 网页制作

    1.站点 1.1 创建站点 点击菜单栏中站点进行站点创建,输入站点名称,路径 1.2 设置图像文件夹 1.3 站点管理 站点的编辑.复制.删除 2.页面属性栏 2.1 外观 1.设置页面整体的字体.大 ...

  2. nRF52832-GPIOTE部分

    GPIOTE部分学习思维导图 GPIOTE原理 1.1nRF52832寄存器类型 Task:任务寄存器,可以由程序或事件触发 Event:事件寄存器,事件可以产生中断和触发任务 Register:普通 ...

  3. Codeforces 101173 C - Convex Contour

    思路: 如果所有的图形都是三角形,那么答案是2*n+1 否则轮廓肯定触到了最上面,要使轮廓线最短,那么轮廓肯定是中间一段平的 我们考虑先将轮廓线赋为2*n+2,然后删去左右两边多余的部分 如果最左边或 ...

  4. SpringData Redis

    Redis spring-data-redis

  5. 第一章 Lab

    关于Lab 教材恶意代码分析实战 课后练习恶意代码样本https://practicalmalwareanalysis.com或https://nostarch.com/malware.htm 以下是 ...

  6. LeetCode--268--缺失数字

    问题描述: 给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数. 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [9 ...

  7. 从华为数字化转型看IT自动化运维重要性

    关注嘉为科技,获取运维新知 8月有幸聆听了华为CIO陶总(陶景文)关于“华为数字化转型秘诀:坚定“以客户为中心”的思想”的演讲,获益良多.其中陶总也分享了IT运营平台的建设对于华为实现数字化转型的重要 ...

  8. vux 给元素动态添加css

    <template> <div class="jdtI" :style="{styleObj}"></div> </t ...

  9. 小程序动态添加class及调接口传递多个参数

    1.动态添加class <view class="step2 {{indication == 2 ?'on':''}}"> <view class='tc lef ...

  10. Runable和Thread

    Java多线程 java中有两种实现多线程的方式: 1. 一种是通过继承Thread类,同时重写run()方法.但是java中,只允许单继承,也就是一个类只能继承一个父类,使得该方式具有一定的局限性, ...