免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2496 | 回复: 8
打印 上一主题 下一主题

awk 练习题 第7章 求解 !!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-23 04:48 |只看该作者 |倒序浏览
awk 练习题 第7章 求解 !!!

cat aawk.txt
Mike Harrington510) 548-1278:250:100:175
Susan Dalsass206) 654-6279:250:60:50
Archie McNichol206) 548-1348:250:100:175
Jody Savage206) 548-1278:15:188:150
Guy Quigley916) 343-6410:250:100:175
Dan Savage406) 298-7744:450:300:275
Nancy McNeil206) 548-1278:250:80:75
John Goldenrod916) 348-4278:250:100:175
Chet Main510) 548-5258:50:95:135
Tom Savage40 926-3456:250:168:200

希望得到结果是

awk -f awk.sc aawk.txt

                                         ***CAMPAIGN 1998 CONTRIBUTIONS***

------------------------------------------------------------------------------------------------------------------------

NAME                             PHONE                   Jan     |       Feb     |       Mar     |       Total Donated

-------------------------------------------------------------------------------------------------------------------------

Mike Harrington                 (510) 548-1278           250             100             175               525
Susan Dalsass                   (206) 654-6279           250             60              50                360
Archie McNichol                 (206) 548-1348           250             100             175               525
Jody Savage                     (206) 548-1278           15              188             150               353
Guy Quigley                     (916) 343-6410           250             100             175               525
Dan Savage                      (406) 298-7744           450             300             275               1025
Nancy McNeil                    (206) 548-1278           250             80              75                405
John Goldenrod                  (916) 348-4278           250             100             175               525
Chet Main                       (510) 548-5258           50              95              135               280
Tom Savage                      (40 926-3456           250             168             200               618
-------------------------------------------------------------------------------------------------------------------------

                                         ***SUMMARY***

-------------------------------------------------------------------------------------------------------------------------

The campaign received a total of $5141 for this quarter
The average donation for the 12 contributors was $514.1
The highest contribution was $300.00
lowest contribution was $15.00


我自己写的脚本如下

cat awk.sc
BEGIN{FS=":"; OFS="\t\t"
print "\t\t\t\t\t ***CAMPAIGN 1998 CONTRIBUTIONS***\t\t\t\t\t\n"
print "------------------------------------------------------------------------------------------------------------------------\n"
print "NAME \t\t\t\t PHONE \t\t\t Jan \t | \t Feb \t | \t Mar \t | \t Total Donated\n"
print "-------------------------------------------------------------------------------------------------------------------------\n"
}
{$6=$3 + $4 + $5; campaign+=$6; print $1,"\t"$2," "$3, " " $4," "$5,"   "$6}
END{average=campaign / 10;
print "-------------------------------------------------------------------------------------------------------------------------\n"
print "\t\t\t\t\t ***SUMMARY***\t\t\t\t\t\n"
print "-------------------------------------------------------------------------------------------------------------------------\n"
print "The campaign received a total of $"campaign" for this quarter"
print "The average donation for the 12 contributors was $"average
#print "aaaaaaaaaa" ; print $3 | "sort -n | head -1"
print "The highest contribution was $300.00"
print "lowest contribution was $15.00"}


主要的问题是 我如何求出 第2域的最小值 和 第3域的最大值
{print $2 | "sort -n | head -1"}   问题是我如何把结果15 贬值给一个变量 比如a=15
15

{print $3 | "sort -r -n | head -1"} 把这个结果也贬值给一个变量 ,,比如b=300
300

我测试了多次也没有成功,,,哪位大哥帮忙看一下,,我错在哪里

论坛徽章:
0
2 [报告]
发表于 2009-08-23 08:12 |只看该作者
设定两个新变量,然后在每行中进行对比,如果大(小)于此变量。。。。

我的想法是这们的,不知对否。

论坛徽章:
0
3 [报告]
发表于 2009-08-24 03:31 |只看该作者
不知道这能不能帮上楼主

$ awk -F":" '{print $2}' aawk.txt  |sort
(206) 548-1278
(206) 548-1278
(206) 548-1348
(206) 654-6279
(406) 298-7744
(40 926-3456
(510) 548-1278
(510) 548-5258
(916) 343-6410
(916) 348-4278

[ 本帖最后由 alenbull 于 2009-8-24 03:36 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-08-24 03:32 |只看该作者
$ awk -F":" '{print $3}'  aawk.txt  |sort -n
15
50
250
250
250
250
250
250
250
450

论坛徽章:
0
5 [报告]
发表于 2009-08-24 06:06 |只看该作者
你这个有点取巧吧..你已经知道哪行最大了.再在里面选最大值?....
而且最大明显不是450嘛.....
还有12..明明只有10行....

论坛徽章:
0
6 [报告]
发表于 2009-08-24 11:04 |只看该作者
这帖子有人发过了,一模一样例子,一模一样的要求,

论坛徽章:
0
7 [报告]
发表于 2009-08-24 13:02 |只看该作者

回复 #4 alenbull 的帖子

这个我知道啊,,问题是如何把这个加到脚本里面呢,,就是加到我上面的脚本里面呢  ??

论坛徽章:
0
8 [报告]
发表于 2009-08-24 13:09 |只看该作者
{$6=$3 + $4 + $5; campaign+=$6; print $1,"\t"$2," "$3, " " $4," "$5,"   "$6}
=>
FNR==1{
max=min=$3}
{for(i=3;i<=5;i++){max=$i>max?$i:max; min=$i<min?$i:min}
$6=$3 + $4 + $5; campaign+=$6; print $1,"\t"$2," "$3, " " $4," "$5,"   "$6}

最后输出max和min就行了。取最大最小值在任何地方都是一个套路,要举一反三啊。

论坛徽章:
0
9 [报告]
发表于 2009-08-24 13:55 |只看该作者

回复 #8 kwokcn 的帖子

谢谢LS 的大哥,,,我这就去实验一下....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP