首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

UNIX SHELL实例精解awk习题

2013-11-02 
UNIX SHELL范例精解awk习题题目(书中图片):题目文件:Mike Harrington:(510) 548-1278:250:100:175Christia

UNIX SHELL范例精解awk习题
题目(书中图片):

UNIX SHELL实例精解awk习题

UNIX SHELL实例精解awk习题

UNIX SHELL实例精解awk习题

题目文件:
Mike Harrington:(510) 548-1278:250:100:175Christian Dobbins:(408) 538-2358:155:90:201Susan Dalsass:(206) 654-6279:250:60:50 Archie McNichol:(206) 548-1348:250:100:175 Jody Savage:(206) 548-1278:15:188:150 Guy Quigley:(916) 343-6410:250:100:175 Dan Savage:(406) 298-7744:450:300:275 Nancy McNeil:(206) 548-1278:250:80:75 John Goldenrod:(916) 348-4278:250:100:175 Chet Main:(510) 548-5258:50:95:135 Tom Savage:(408) 926-3456:250:168:200 Elizabeth Stachelin:(916) 440-1763:175:75:300 
(下载地址:)


我的做法:#Scriptname:xxx
#type:awk script
BEGIN{
FS=":"    #设置分隔符冒号:
total=0;     #所有人捐款总数
print "\n\t\t***CAMPAIGN 2004 CONTRJBUTIONS***"
print "--------------------------------------------------------------------------"
printf " NAME\t\t PHONE\t Jan | Feb | Mar | Total Donated\n"
print "--------------------------------------------------------------------------"
}    #头信息输出
{sum=$3+$4+$5;    #每个人的捐款总数
printf("%-20s%-17s%-8.2f%-8.2f%-8.2f%.2f\n",$1,$2,$3,$4,$5,sum)       #主体输出
total+=sum;   #计算所有人的捐款总数
if(sum>500){
phone[$1]=$2    #把所有捐款捐款总数大于500的保存到数组phone中,用名字作为数组下标索引
}
if(sum>max){
max=sum;    #个人捐款最多的数目
name=$1;    #个人捐款最多的人我名字
}
}
END{
print "--------------------------------------------------------------------------"
print "\t\t\t\t SUMMARY"
print "--------------------------------------------------------------------------"
printf("The campaign received a total of $%.2f for this quarter.\n",total)
printf("The average donation for the 12 contributors was $%.2f.\n",total/12)
printf("The highest total contribution was $%.2f by %s.\n",max,name)
split(name,names," ")   #把名字用空格符分到names数组
printf("\t\t\t***THANKS %s***\n",names[1]) #输出first name
printf("The following people donated over $500 to the campaign.\n")  #下面所有人的捐款都大于500
print "They are eligible for the quarterly drawing!!"
print "Lested are their names(sorted by last names) and phone numbers:"  #用last name排序
for(i in phone){
printf "\t%s--%s\n",i,phone[i]|"sort -k2"  #输出收集到管道,开启排序,然后输出
}
close("sort -k2")   #关闭排序,否则下面语句也参与排序,关闭语句和开启语句要一致
print "\t Thanks to all of you for your continued support!!"
}源码下载地址:


热点排行