看了几本关于python和shell的书后,发现不动手的话的确特别容易忘掉,故打算在新年里每天一道编程题,坚持一下看看。
Day 1 shell
编写一个awk脚本用来计算每个人的平均成绩,每次测试的平均成绩和每组队的平均成绩。如果某次成绩为负数,则表示此人错过了测试,那计算平均成绩时排除此人再计算。
输出的结果如下表,在名字的列表中,名字是10个宽度且左对齐(提示printf中使用%-10s格式),而平均值是7个字符宽度,右边两个右对齐的小数。成绩记录record1.txt如下:
Name,Team,First Test, Second Test, Third Test Tom,Red,5,17,22 Joe,Green,3,14,22 Maria,Blue,6,18,21 Fred,Blue,2,15,23 Carlos,Red,-1,15,24 Phuong,Green,7,19,21 Enrique,Green,3,16,20 Nancy,Red,9,12,24
输出结果如下:
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 1 : 5 Average for Test 2 : 15.75 Average for Test 3 : 22.125 ------------------- Average for Red Team: 16 Average for Blue Team: 14.1667 Average for Green Team: 13.8889
awk代码如下:
awk -F, 'BEGIN { printf("%-10s\t%s\n","Name","Avarage") printf("%-10s\t%s\n","____","_______") } NR>1 {sum=0; i=0; for (k=3;k<=5;k++) if($k>0){ sum+=$k; i++; test[k-2]+=$k; testteam[$2]+=$k; numcount[k-2]++; teamcount[$2]++; } printf("%-10s\t%.2f\n",$1,sum/i) } END{ printf("_____________\n") for(k=1;k<=3;k++){ printf("Average for Test %d: %.2f\n",k,test[k]/numcount[k]) } printf("_____________\n") for (item in testteam){ printf("Average for %s Team: %.2f\n",item,testteam[item]/teamcount[item]) } }' record1.txt
testteam是指红黄绿这三支队伍的累积得分,test是指第一二三次考试的累积得分,numcount是指每轮考试的参加人数,teamcount是指每支队伍的参加人数。NR是指当前工作空间的记录数,NR>0指不处理第一行记录标头。注意awk中if和for均需要用{}将后面的内容括起,这样换行不会出问题。awk中的变量也有类似python的字典值,注意此时for循环中拿出元素需要小括号:for (i in testteam)。
相关推荐
考试类精品--编程每日一题:每天一道精选面试或编程题,180秒内语音答题模式凝练答案。次日推送标准参考答案至群内供大
每天一道精选面试或编程题,180 秒内语音答题模式凝练答案。次日推送标准参考答案至群内供大家复盘,做到事事有回音,题题有答案。每天早上 8:16 准时发车,来不及解释了,快上车! 本仓库为已经发布的题目和答案...
这也是与动态编程的主要区别,动态编程是详尽的,并且保证能够找到解决方案。在每个阶段之后,动态编程基于前一阶段做出的所有决策做出决策,并且可能会重新考虑前一阶段的算法求解路径。 最优子结构 "如果问题的最...
ACM新手必备的编程题,C语言经典算法和习题大全。囊括大部分的算法和习题,编程必备。每天一道必成高手。
【一线互联网大厂Java核心面试题库】Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等..
欢迎关注我的公众号“编程拯救世界”(CodeWarrior_),加入编程世界一起冒险,一起成长! 如果你对分享题解或做题研究,欢迎加入。 基本概念 (更新中……) 题解分类 数据结构 树 算法思想 排序 搜寻 关于我们 :...
但每天不要占用自己太多时间到这里来,每天思考一两题,简单记录一下解题过程,碰到优秀的题目和解题方法会重点总结揣摩,坚持半年,再来看!!(18-07-02) 18-08-30,终于将难度为简单,标签为:数组、哈希表、数学...
leetcode题库 Datawhale_Learning涵盖了AI领域从理论知识到动手实践的学习内容 ...组队学习说明:Leetcode刷题组队学习,从零开始每天一道算法题,在良好的学习氛围下,培养刷题习惯,学习算法思想。(不限制编程
End Checklist全栈增长工程师指南前端技术清单前端收集Grab Front End GuideJS 函数式编程指南木易杨 高级前端进阶每天一道面试题前端技术书前端面试手册Front-end Job Interview Questions成为专业程序员路上用到的...
5.牛的繁殖问题 :有位科学家曾出了这样一道数学题:有一头母牛,它每年年初要生一头小母牛; * 每头小母牛从第四个年头起,每年年初也要生一头小母牛。按此规律,若无牛死亡,第20年头上共有多少头母牛?*/ 6.打印...
7.每天一道+ LeetCode上的算法题 ###学习日程安排表### 主要方向:APP开发(米柚系统适配) 周六 周日 周一 周二 周三 周四 周五 4 - 10 AM 参加封训开始会议并整理暑期计划 Java第二阶段学习(面向对象编程) Java...
1、一道类加载的问题,一个类,在类加载之后,如果对类的内容进行修改,如何在不重新启动虚拟机的情况下,加载已经变化过的类 你可以创建个新的class loader,然后用loadClass加载,再newInstance;原来加载的...
每天完成2道题,但只更新一道,每天上传的都是自己需要复习的。认识到自己的能力欠缺至极,感慨他人精妙的解法,而自己却只能仰望。有所不甘,但转念一想,能站在巨人的肩膀上抽烟,也是一种幸福。每天都会怀疑做这...
leetcode下载 My GitHub Star Catalog 本项目为本人清单 ...:每天搞定一道前端大厂面试题。 :技术面试必备基础知识、Leetcode 题解、Java、C++、Python、后端面试、操作系统、计算机网络、系统设计。
它既没有对计算机算法领域进行广度或深度的研究,也没有遵照惯例来讲述设计计算机算法的方法,甚至连一道需要读者自己求解的难题或者练习题也没有。 那么,这是一本什么样的书呢?如果你符合如下条件,那么就可以...