每天一道编程题

1. 日志信息如下:

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

   此日志中中包含名字,电话号码和过去三个月里的捐款。

1) 显示所有电话

awk 'split($3,num,":") {print num[1]}' awkdata

 2) 显示Dan的电话号码

awk '{if($1=="Dan"){ split($3,num,":"); print num[1]}}' awkdata 

 3) 显示Susan的名字和电话号码

awk '{if($1=="Susan"){ split($3,num,":"); printf("%s:%s\n",$1,num[1])} }' awkdata 

 4) 显示所有以D开头的姓

awk --posix '/[A-Z]* D/ {split($2,name,":");print name[1]}'  awkdata 

 5) 显示所有以一个C或E开头的名

awk --posix '/^[CE].*/ { print $1 }'  awkdata

 6) 显示所有只有四个字符的名

awk --posix '/^[A-Za-z]{4} / { print $1 }'  awkdata

 7) 显示所有区号为916的人名

awk --posix '/:\[916\]/ { split($2,name,":");print $1,name[1] }'  awkdata 

 8) 显示Mike的捐款.显示每个值时都有以$开头.如$250$100$175

awk --posix '/^Mike/ { split($3,money,":");printf("$%s$%s$%s\n",money[2],money[3],money[4]) }'  awkdata

 9) 显示姓,其后跟一个逗号和名,如Jody,Savage

awk '{split($2,name,":"); printf("%s,%s\n",name[1],$1)}'  awkdata

 10) 写一个awk的脚本,它的作用: 

a. 显示Savage的全名和电话号码

b.显示Chet的捐款 

c.显示所有头一个月捐款$250的人名

awk --posix '/Savage/ {split($2,name,":"); split($3,phone,":");printf("%s %s:%s\n",$1,name[1],phone[1])}'  awkdata
awk --posix '/Chet/ { split($3,money,":");printf("Chet的捐款:%s,%s,%s\n"),money[2],money[3],money[4]}' awkdata
awk --posix '/-[0-9]{4}:250/ { split($2,name,":");printf("%s %s\n"),$1,name[1]}' awkdata

     最后一道这种方式怎么写成一个脚本?

猜你喜欢

转载自yeluowuhen.iteye.com/blog/2277528