欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

linux awk高级应用实例

程序员文章站 2022-04-25 15:17:46
今天看到unix shell 范例精解上有道awk的题目 做了以后拿来和大家分享下 处理前的文档:  mike harrington:(510) 548-12...

今天看到unix shell 范例精解上有道awk的题目 做了以后拿来和大家分享下

处理前的文档:

 mike harrington:(510) 548-1278:250:100:175
 christian dobbins:(408) 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:(408) 926-3456:250:168:200
 elizabeth stachelin:(916) 440-1763:175:75:300

需要的结果如下:
                ***campaign 1998 contributions***

name                   phone                   jan |   feb |   mar |   total donated
---------------------------------------------------------------------------------
 
mike harrington         (510) 548-1278          250     100     175     525
christian dobbs         (408) 538-2358          155     90      201     446
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              (408) 926-3456          250     168     200     618
elibeth stachel         (916) 440-1763          175     75      300     550

 summary
-----------------------------------------------------------------------------------
the campan received atotal of $6137 for this quarter
average donation for the 12 contributors was $511.417.
the highest contribution was $450.
the lowest contribution was $15.

代码如下:

begin{fs=":";low1=300;low2=400;low3=500
    ofs="\t"
    print "\t\t***campaign 1998 contributions***\n"
    print "---------------------------------------------------------------------------------\n"
    print " name\t\t\tphone\t\t\tjan |\tfeb |\tmar |\ttotal donated"
    print "---------------------------------------------------------------------------------\n"
    }
 
{tot=$3+$4+$5}
{ttot+=tot}
{print $1,"\t"$2"\t\t"$3" \t"$4" \t"$5" \t"tot}
{avg=ttot/12}
{high1=(high1>$3)?high1:$3}
{high2=(high1>$4)?high1:$4}
{high3=(high1>$5)?high1:$5}
{max12=(high1>high2)?high1:high2}
{max23=(high2>high3)?high2:high3}
{max=(max12>max23)?max12:max23}
{low1=(low1<$3)?low1:$3}
{low2=(low1<$4)?low1:$4}
{low3=(low1<$5)?low1:$5}
{min12=(low1<low2)?low1:low2}
{min23=(low2<low3)?low2:low3}
{min=(min12<min23)?min12:min23}
 
end{
    print "-----------------------------------------------------------------------------------"
    print"\t\tsummary"
    print "-----------------------------------------------------------------------------------"
    printf "the campan received atotal of $";printf ttot; print " for this quarter"
    printf "average donation for the 12 contributors was $"; printf avg ;print"."
    printf "the highest contribution was $";printf max;print "."
    printf "the lowest contribution was $";printf min;print "." 
}