- 论坛徽章:
- 0
|
不知道这次我描述明白没?请指教。
多谢各位热心高手,这个是我在看《unix shell范例精解4》的时候遇到的一个例子,也没什么实用价值,就拿来研究下。
其源文件是:
Mike Harrington 510) 548-1278:250:100:175
Christian Dobbins 40 538-2358:155:90:201
Susan 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:(40 926-3456:250:168:200
Elizabeth Stachelin:(916) 440-1763:175:75:300
以下是我脚本:
#!bash
BEGIN{FS=":" ;max=0
print " ***FIRST QUARTERLY REPORT***"
print " ***CAMPAIGN 2004 CONTRIBUTIONS***";
print "-------------------------------------------------------------------------------";
printf("%-20s%-20s %-5s| %-5s| %-5s| %s\n","NAME"," HONE","Jan","Feb","Mar","Total Donated" ;
print "-------------------------------------------------------------------------------";
}
{Donatedtotal=$3+$4+$5;
printf("%-20s%-20s %-6.2f %-6.2f %-6.2f %-6.2f\n",$1,$2,$3,$4,$5,Donatedtotal);
totals+=Donatedtotal;
if(max<Donatedtotal){max=Donatedtotal;maxname=$1};
if(Donatedtotal>500){mores[$1]=$2}
}
END{
printf("1,$%7.2f\n",totals);
printf("2,$%7.2f by %s\n",max,maxname);
print "over 500:";
for(n in mores)
printf("%s--%s\n",n,mores[n])
}
以下是输出结果:
***FIRST QUARTERLY REPORT***
***CAMPAIGN 2004 CONTRIBUTIONS***
-------------------------------------------------------------------------------
NAME PHONE Jan | Feb | Mar | Total Donated
-------------------------------------------------------------------------------
Mike Harrington (510) 548-1278 250.00 100.00 175.00 525.00
Christian Dobbins (40 538-2358 155.00 90.00 201.00 446.00
Susan Dalsass (206) 654-6279 250.00 60.00 50.00 360.00
Archie McNichol (206) 548-1348 250.00 100.00 175.00 525.00
Jody Savage (206) 548-1278 15.00 188.00 150.00 353.00
Guy Quigley (916) 343-6410 250.00 100.00 175.00 525.00
Dan Savage (406) 298-7744 450.00 300.00 275.00 1025.00
Nancy McNeil (206) 548-1278 250.00 80.00 75.00 405.00
John Goldenrod (916) 348-4278 250.00 100.00 175.00 525.00
Chet Main (510) 548-5258 50.00 95.00 135.00 280.00
Tom Savage (40 926-3456 250.00 168.00 200.00 618.00
Elizabeth Stachelin (916) 440-1763 175.00 75.00 300.00 550.00
1,$6137.00
2,$1025.00 by Dan Savage
over 500:
Elizabeth Stachelin--(916) 440-1763
Tom Savage--(40 926-3456
Archie McNichol--(206) 548-1348
Dan Savage--(406) 298-7744
John Goldenrod--(916) 348-4278
Guy Quigley--(916) 343-6410
Mike Harrington--(510) 548-1278
对输出结果有几个要求,其他的我侥幸都满足了,只有最后一个,要通过last name对捐款额大于500的排序。谢谢各位! |
|