Chinaunix首页 | 论坛 | 博客
  • 博客访问: 662055
  • 博文数量: 139
  • 博客积分: 2655
  • 博客等级: 少校
  • 技术积分: 1723
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-02 16:03
文章分类

全部博文(139)

文章存档

2013年(2)

2011年(17)

2010年(14)

2009年(86)

2008年(20)

分类:

2009-10-17 23:36:59

设文件score.txt中有如下的学生成绩:

Jim  80
Tom 75
Peter 85
Jim   60
Peter 78
Jim  100
其中学生数量在10-20之间,总行数在100-200之间,打印"name average(=总成绩/科目数)"如下形式(忘了是按成绩的升序还是降序了):
Tom   75
Jim  80
Peter 80.5

应该说还是挺简单的,以下是两种接法:

awk '{score[$1]+=$2;num[$1]+=1};END{for (i in score){print i " " score[i]/num[i]} }' score.txt |sort -k2 (-r)


#!/usr/bin/env python
#file:score.py
import re
from operator import itemgetter
scorehash={}
numhash={}
f=open('./score.txt','r')
for i in f:
    a=re.search(r'(\w*)\s*(\d*)',i)
    key=a.group(1)
    value=int(a.group(2))
    #if not numhash.has_key(key):
    if key not in numhash:
        numhash[key]=0
    #if not scorehash.has_key(key):
    scorehash[key]=0
    numhash[key]+=1
    scorehash[key]+=value

#for j in scorehash.keys():
# print j + ' ' + str(scorehash[j]/numhash[j])

#python score.py|sort -k2 (-r)
#or use the below codes,
#for j in sorted(scorehash.items(),key=itemgetter(1),reverse=True):
for j in sorted(scorehash.items(), key=itemgetter(1)):
         print j[0] +' '+str(scorehash[j[0]]/numhash[j[0]])

f.close()


阅读(1549) | 评论(0) | 转发(0) |
0

上一篇:也谈字符串反向打印

下一篇:固态硬盘

给主人留下些什么吧!~~