LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: KornLee

grep,sed,awk命令实例大练习[整理]

[复制链接]
 楼主| 发表于 2003-2-14 00:01:53 | 显示全部楼层
哇~~~这里藏龙卧虎!佩服!
那颠倒名和姓的问题总是不明白!谢谢!总算搞懂啦
  1. javalee//home/javalee/x>cat sedfile
  2. #sed script
  3. 1i\
  4. PERSONNEL FILE
  5. s/[1-9]*500$//
  6. s/^\([a-zA-Z]\+\) \([a-zA-Z]\+\)\(.*\)/\2 \1\3/g
  7. $ a\
  8. END
  9. javalee//home/javalee/x>sed -f sedfile datafile
复制代码
 楼主| 发表于 2003-2-14 01:26:56 | 显示全部楼层

awk命令大练习

awk命令练习.
文件:datafile
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.显示所有电话号码
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的人名.
注:区号本来是圆括号表示的.
发表于 2003-2-14 08:53:22 | 显示全部楼层
哇,佩服佩服。又学到一招。
发表于 2003-2-14 09:37:41 | 显示全部楼层
不知道对不对:
awk -F: '{if($1 ~ /^Dan /) print $2}' adatafile
awk -F: '{if($1 ~ /^Susan /) print $1":"$2}' adatafile
awk '{if($2 ~ /^D/) print $2}' adatafile |awk -F: '{print $1}'
awk  '{if($1 ~ /(^C|^E)/) print $1}' adatafile
awk  '{if(length($1)==4) print $1}' adatafile
awk -F: '{if($2 ~ /\[916\]/) print $1}' adatafile
awk -F: '{if($1 ~ /^Mike /) print "$"$3""$4""$5}' adatafile
awk -F: '{print $1}' adatafile|awk '{print $2","$1}'

#!/bin/awk -f
BEGIN{
FS=":"}
{if($1 ~/ Savage/) print $1":"$2}
{if($1 ~/^Chet /) print "$"$3""$4""$5}
{if($3 == 250) print $1}
 楼主| 发表于 2003-2-14 12:20:43 | 显示全部楼层
兄弟做得太快啦;) 我刚开始做您就出答案啦! 佩服佩服~~
发表于 2003-2-14 13:36:40 | 显示全部楼层
还要多谢版大啊,你出的这些题目让我受益非浅啊,有很多东西学了一直没有用的机会,越来越淡忘了,这样复习一下,感觉又好起来了。
 楼主| 发表于 2003-2-14 23:12:32 | 显示全部楼层
呵~~~因为这三个在UNIX/LINUX上经常用的实用命令,在shell中起很大的用处,sed,grep,awk把UNIX/LINUX的对数据操作的强大功能表现得淋漓尽致,希望兄弟有好的东西别忘了帖出来哟?!
 楼主| 发表于 2003-2-15 00:46:55 | 显示全部楼层

请教:)

1.javalee//home/javalee/x>awk -F: '{print $2}' d
2.javalee//home/javalee/x>awk -F: '/Dan/{print $2}' d
3.javalee//home/javalee/x>awk -F: '/Susan/{print $1,$2}' d
4.javalee//home/javalee/x>awk -F: '{print $1}' d|awk '/[a-zA-Z]* D[a-z]/{print $2}'
Dobbins
Dalsass
5.javalee//home/javalee/x>awk '/C|E[a-z]/{print $1}' d
Christian
Chet
Elizabeth
6.??????请指教;)
7.avalee//home/javalee/x>awk -F: '/(916)/{print $1}' d
8.javalee//home/javalee/x>awk -F: '/Mike/{print "$"$3,"$"$4,"$"$5}' d
$250 $100 $175
9.javalee//home/javalee/x>awk -F: '{print $1}' d|awk '{print $2,",",$1}'

10:
javalee//home/javalee/x>cat awkfile    //awk脚本
#awk script
/Savage/{print $1,$2}
/Chet/{print "$"$3,"$"$4,"$"$5}
/250/{print $1,$3}

javalee//home/javalee/x>awk -F: -f awkfile d //运行awk脚本
Mike Harrington 250
Susan Dalsass 250
Archie McNichol 250
Jody Savage (206) 548-1278
Guy Quigley 250
Dan Savage (406) 298-7744
Nancy McNeil 250
John Goldenrod 250
$50 $95 $135
Tom Savage (408) 926-3456
Tom Savage 250
结果咋那么乱?!请指教;)
发表于 2003-2-15 21:57:33 | 显示全部楼层
awk是什么命令来的????
 楼主| 发表于 2003-2-15 23:13:53 | 显示全部楼层
awk是用来操作数据和产生报表的一种编程语言.
awk代表该语言的三位作者的姓的头一个字母,Alfred Aho,Peter Weinberger,Brian Kernighan.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表