免费注册 查看新帖 |

Chinaunix

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

求教unix shell范例精解的一道awk练习 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-16 16:01 |只看该作者 |倒序浏览
我看的第三版,113页的那道练习。
在第四版中,是第六章的LAB5习题。
下面程序达到了题目要求,但感觉方法不大合适。
想请教有没好点的办法?

其中,在BEGIN设置min变量,保存捐款的最小值
awk执行语句中设置total、min、max的值,以供END中打印总结结果。)
  1. BEGIN  {
  2.         print "\n           ***CAMPAIGN 1998 CONTRIBUTIONS***";
  3.         print "-------------------------------------------------------------------";
  4.         print "   NAME                  PHONE       JAN     FEB     MAR     TOTAL";
  5.         print "-------------------------------------------------------------------";
  6.         min = 5000;
  7. };
  8. {
  9.         total += $3+$4+$5;

  10.         if (max<$3) max = $3
  11.         else if (max<$4) max = $4
  12.         else if (max<$5) max = $5;

  13.         if (min>$3) min = $3
  14.         else if (min>$4) min = $4
  15.         else if (min>$5) min = $5;

  16.         printf "%-19s %-15s %6.2f %7.2f %7.2f %7.2f\n",$1,$2,$3,$4,$5,$3+$4+$5
  17. }
  18. END    {
  19.         print "-------------------------------------------------------------------";
  20.         print "                     SUMMARY";
  21.         print "-------------------------------------------------------------------";
  22.         printf "  The campaign received a total of $%.2f for this quarter\n", total;
  23.         printf "  The average donation for the 12 contributors was $%6.2f.\n", total/12;
  24.         printf "  The highest contribution was $%6.2f\n", max;
  25.         printf "  The lowest contribution was $%6.2f\n", min;
  26.         print "-------------------------------------------------------------------";
  27. }
复制代码


数据文件如下,假设是filename文件
Mike Harrington510) 548-1278:250:100:175

Christian Dobbins40 538-2358:155:90:201

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 Savage:(40 926-3456:250:168:200

Elizabeth Stachelin:(916) 440-1763:175:75:300



调用脚本:gawk -f nawk.sc filename

[ 本帖最后由 bert1984 于 2009-2-16 23:47 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-02-16 21:26 |只看该作者
貌似文不对题!!!!!!!!

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
3 [报告]
发表于 2009-02-16 22:15 |只看该作者
不懂要表达什么意思?~?

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
4 [报告]
发表于 2009-02-16 22:24 |只看该作者
这时的例子仅仅是让你熟悉AWK的语法而已....

论坛徽章:
0
5 [报告]
发表于 2009-02-16 22:26 |只看该作者
没有数据文件?

论坛徽章:
0
6 [报告]
发表于 2009-02-17 00:15 |只看该作者
对,让你先对awk的语法有大概的了解!!!

论坛徽章:
0
7 [报告]
发表于 2009-02-17 07:15 |只看该作者
回头拿书看一下。

论坛徽章:
0
8 [报告]
发表于 2009-02-17 09:38 |只看该作者
我觉得方法很好呀,很清晰,total为所有记录三个段的总合,min取所有记录三个段中的最小值,max为最大。你觉得那里不合适呢?

论坛徽章:
0
9 [报告]
发表于 2009-02-17 09:58 |只看该作者
调用脚本写错了
awk -F: -f nawk.sc filename
我看了一下书

觉得这样就可以了,没什么不合适的啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP