Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2448614
  • 博文数量: 540
  • 博客积分: 11289
  • 博客等级: 上将
  • 技术积分: 6160
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-11 20:27
个人简介

潜龙勿用,见龙在田

文章分类

全部博文(540)

文章存档

2018年(2)

2013年(5)

2012年(24)

2011年(104)

2010年(60)

2009年(217)

2008年(128)

分类:

2009-07-08 13:15:15

arch文件里有3个域,依次为:NAME、sub1、sub2
需求1. :现在想把每个人的总成绩按高到低排序

[root@localhost tmp]# cat arch
A       80      90
B       85      95
C       93      88
D       79      90
E       75      99

[root@localhost tmp]# cat arch|awk '{print $1,($2 + $3)}'|sort -rk2
C 181
B 180
E 174
A 170
D 169

需求2:按每个人平均分由高到低排序,并在每条记录前加上序列号。如下:

[root@localhost tmp]# cat arch|awk '{total=$2+$3;print $1,total/2}'|sort -rk2|awk '{print NR".",$0}'
1. C 90.5
2. B 90
3. E 87
4. A 85
5. D 84.5

需求3:统计总分并按降序排列:
grades:

peter math 96
john math 92
john chinese 90
peter chinese 88

参考答案:

USER_LIST=`awk '{print $1}' grades |sort|uniq`

for i in $USER_LIST;do awk '{if ($1== "'"$i"'") sum += $3}END{printf "'"$i"'\t" sum"\n"}' grades;done | sort -rnk2


peter   184

john    182


稍微讲解一下:

上面awk语句中使用单引号加双引号('""')shell中的参数传递给awk




阅读(1743) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~