Chinaunix

标题: 按学生顺序得到每个人的最高成绩以及科目 [打印本页]

作者: chenjiali1    时间: 2020-04-27 23:28
标题: 按学生顺序得到每个人的最高成绩以及科目
成绩单如下
张三  78  语文
张三  71  数学
张三  87  政治
李四  96  语文
李四  92  数学
李四  80  政治
......


我想要的结果如下,输出每个人的最高成绩以及科目。
张三  87  政治
李四  96  语文
....

想要学生的顺序和成绩单中一样,即还是按照张三李四的顺序下来,谢谢大家!

作者: chengchow    时间: 2020-04-28 09:22
  1. [root@opsmanage18 ~]# awk '{$2" "$3>a[$1]?a[$1]=$2" "$3:a[$1]=a[$1]}END{for(i in a){print i,a[i]}}' aa.log
  2. 李四 96 语文
  3. 张三 87 政治
复制代码

作者: Looiml    时间: 2020-04-28 19:17
回复 2# chengchow
目测会有问题,100分会比95分小,而且数组的顺序是随机的。

作者: cfwyy    时间: 2020-04-29 08:12
多门课成绩一样怎么办?  还要保证原始顺序,好像没那么简单
作者: 关阴月飞    时间: 2020-04-29 11:25
[ 本帖最后由 关阴月飞 于 2020-04-29 11:37 编辑 ]\n\n[ 本帖最后由 关阴月飞 于 2020-04-29 11:33 编辑 ]\n\n

awk '!t[$1]++{s[++n]=$1} $2>a[$1]{a[$1]=$2;b[$1]=$3}END{for(i=0;++i<=n; ) print s[i],a[s[i]],b[s[i]]}'  urfile

#s[++n]=$1   保存学生顺序
#a[$1]            保存学生最高分数
#b[$1]            保存学生最高分数的科目
作者: LikeLx    时间: 2020-05-06 14:25
  1. awk 'a[$1]<$2{a[$1]=$2;c[$1]=NR;b[c[$1]]=$0}END{for(n=1;n<=asort(c,d);n++)print b[d[n]]}'
复制代码

作者: LikeLx    时间: 2020-05-07 16:26
本帖最后由 LikeLx 于 2020-05-07 16:28 编辑

回复 4# cfwyy
多门成绩相同,都显示
  1. awk 'a[$1]<$2{a[$1]=$2;c[$1]=NR;b[c[$1]]=$0;next}a[$1]==$2{b[c[$1]]=b[c[$1]]"\n"$0}END{for(n=1;n<=asort(c,d);n++)print b[d[n]]}'
复制代码







作者: 寒枫1225    时间: 2020-05-07 17:18
#!/bin/bash
for i in `cat /root/11.txt|cut -f1 -d " "|uniq`
do
        more 11.txt |grep $i|cut -f2 -d " "|sort > 13.txt;
        max=`tail -1 13.txt`;
        cat /root/11.txt|grep $max >> 12.txt;
       
done
作者: wh7211    时间: 2020-05-07 22:24
回复 1# chenjiali1


  1. cat 1
  2. 张三 78 语文
  3. 张三 71 数学
  4. 张三 87 政治
  5. 李四 96 语文
  6. 李四 92 数学
  7. 李四 80 政治
  8. 张五 95 语文
  9. 张五 90 数学
  10. 张五 95 政治
  11. 张四 95 语文
  12. 张四 100 数学
  13. 张四 85 政治

  14. awk '!a[$1]++{if(c){print c};b=c=""}{if(b<$2){b=$2;c=$0}else if(b==$2){c=c"\n"$0}}END{if(c){print c}}' 1
  15. 张三 87 政治
  16. 李四 96 语文
  17. 张五 95 语文
  18. 张五 95 政治
  19. 张四 100 数学
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2