• 说明


  本文案例摘自《unix shell 范例精讲》,答案是自己写的,如果有错的地方或其他方法欢迎指教。


  • 范例


[root@chboa scr2]# cat awk2.test 

ke 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. 显示所有电话号码

2. 显示Dan的电话号码

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

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

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

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

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

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

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

10.写一个awk的脚本,它的作用:显示Savage的全名和电话号码.显示Chet的捐款.显示所有头一个月捐款$250的人名.


答案:

awk -F: '{print $2}' awk2.test

awk -F: '/Dan/{print $2}' awk2.test 

awk -F: '/Susan/{print $1,$2}' awk2.test

awk -F[ :] '$2 ~ /^D/{print $2}' awk2.test

awk -F"[ :]" '$1 ~ /^[C|E]/{print $1}' awk2.test

awk -F"[ :]" '$1 ~ /^....$/{print $1}' awk2.test 

awk -F"[ :]" '$3 ~ /916/{print $1}' awk2.test

awk -F: '$1 ~ /Mike/{print "$"$3"$"$4"$"$5}' awk2.test 

awk -F: '{print $1}' awk2.test |awk '{print $1","$2}'

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

 #cat awk.scl 

$2~/Savage/{print $1,$2,$3,$4}

$1~/Chet/{print "$"$5,"$"$6,"$"$7}

$5~/250/{print $1,$2}

#awk -F"[ :]" -f awk.scl awk2.test 

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

习题二

1.打印在第二个月捐款超过100美元的人的姓和名

2.打印在最后一个月捐款少于85美元的人的姓名和电话号码

3.打印第一个月捐款额在40-150美元之间的人

4.打印这3个月的捐款总额不超过800美元的人

5.打印月均捐款额大于200美元的人的姓名和电话号码

6.打印不在916区的人的姓

7.打印每条记录,并在其记录前加上其记录号

8.打印每个人的姓名和捐款总额

9.把Chet第二个月的捐款额加上10

10.把Nancy McNeil的名字改成Louise Mclnnes

答案:

awk -F: '$4 > 100{print $1}' b.test

awk -F: '$5<85{print $1,$2}' b.test 

awk -F: '$3>40 && $3<150{print $1}' b.test

awk -F: '$3+$4+$5<800{print $1}' b.test

awk -F: '($3+$4+$5)/3<200{print $1}' b.test

awk -F"[ :]" '$3!="[916]"{print $2}' b.test

awk '{print NR,$0}' b.test

awk -F: '{print $1,$3+$4+$5}' b.test 

awk -F: '/^Chet/{$4=$4+10;print}' b.test

awk -F: '/^Nancy/{$1="Louise McLnnes";print}' b.test