资源描述
单击此处编辑母版标题样式,awk,编程的使用,本章目标,1.awk,编程的作用,2.awk,的模式,3.awk,的动作,4.awk,的运算符,5.awk,的内建函数,6.awk,的内建变量,7.awk,与正则的配合使用,awk,编程语言的特点,1.,使用直译器,(Interpreter),不需先行编译,2.,变量无类型之分,(Typeless),3.,可使用文字当数组的下标,(Associative Array),4.awk,撰写程序比起使用其它语言更简洁便利且节省时间,5.awk,还具有一些内建变量和函数,6.awk,擅于处理具数据行,(Record),字段,(Field),型态的资料,7.awk,内建有,pipe,的功能,可以传送到,shell,进行加工处理,8.,awk,的数据行,数据行,:awk,从数据文件上读取数据的基本单位,.,以上列文件,emp.dat,为例,awk,读入的,第一笔数据行是,A125 Jenny 100 210,第二笔数据行是,A341 Dan 110 215,一般而言,一个 数据行 就相当于数据文件上的一行资料,awk,的数据列,字段,(Field):,为数据行上被分隔开的子字符串,.,以数据行,A125 Jenny 100 210,为例,第一栏 第二栏 第三栏 第四栏,A125 Jenny 100 210,一般是以空格符来分隔相邻的字段,.,awk,程序的主要结构,awk,程序的主要结构,:,awk,程序中主要语法是,Pattern Actions,故常见之,awk,程序其型态如下,:,Pattern1 Actions1,Pattern2 Actions2,.,Pattern3 Actions3,pattern,是什么,?,awk,可接受许多不同型态的,Pattern.,一般常使用,关系表达式,(Relational expression),来当成,Pattern.,例如,:,x 34,是一个,Pattern,判断变量,x,与,34,是否存在大于的关系,.,x=y,是一个,Pattern,判断变量,x,与变量,y,是否存在等于的关系,.,上式中,x 34,x=y,便是典型的,Pattern.,awk,提供,C,语言中常见的关系运算符,(Relational Operators),如,=,=,data.rpt,print$1,$2*$3|sort-k 1 data.rpt,END close(data.rpt),close(sort-k 1 data.rpt),print There are,NR,records processed.,awk,中,system,的使用,该指令用以执行,Shell,上的,command.,范 例,:,DataFile=invent.rpt,system(rm DataFile),说明,:,(a)system(,字符串,),指令接受一个字符串当成,Shell,的命令,.,上例中,使用一个字串常数,rm,连接,(concate),一个变量,DataFile,形成要求,Shell,执行的命令,.Shell,实际执行的命令为,rm invent.rpt,awk,中,pipe,的使用,|,配合,awk,输出指令,可把,output,到,stdout,的资料继续转送给,Shell,上的某一命令当成,input,的资料,.,|,配合,awk getline,指令,可呼叫,Shell,执行某一命令,再以,awk,的,getline,指令将该命令的所产生的资料读进,awk,程序中,.,范 例,:,print$1,$2*$3|sort-k 1 result,date|getline Date_data,awk,的内建函数,index(,原字串,找寻的子字串,),length(,字串,),match(,原字串,用以找寻比对的正则表达式,),split(,原字串,数组名称,分隔字符,),sprintf(,格式字符串,项,1,项,2,.),sub(,比对用的正则表达式,将替換的新字串,原字串,),gsub(,比对用的正则表达式,将替換的新字串,原字串,),substr(,字串,起始位置,长度,),awk,的数学函数,int(x):,返回,x,的整数部分,sqrt(x):,返回,x,的平方根,exp(x):,将返回,e,的,x,次方,log(x):,将返回,x,以,e,为底的对数值,sin(x):x,须以弧度为单位,sin(x),将返回,x,的,sin,函数值,.,cos(x):x,须以弧度为单位,cos(x),将返回,x,的,cos,函数值,rand():,返回介于,0,与,1,之间的随机数值,;0 rand()0),print substr(data,RSTART,RLENGTH),sub(/0-9+/,data),结果输出,:,12,34,56,61,awk,中数组的使用,awk,程序中允许使用字符串当做数组的下标,(index).,利用这个特色十分有助于资料统计工作,.(,使用字符串当下标的数组称为,Associative Array),awk,中数组的特性,使用字符串当数组的下标,(index).,使用数组前不须宣告数组名及其大小,awk,数组举例,首先建立一个数据文件,并取名为,reg.dat.,此为一学生注册的资料文件,;,第一栏为学生姓名,其后为该生所修课程,cat reg.dat,Mary O.S.Arch.Discrete,Steve D.S.Algorithm Arch.,Wang Discrete Graphics O.S.,Lisa Graphics A.I.,Lily Discrete Algorithm,需求的实现,范例,:,统计各科修课人数,并印出结果,.,建立如下程序,并取名为,course.awk:,for(i=2;i=NF;i+)Number$i+,ENDfor(course in Number)printf(%10s%dn,course,Numbercourse),执行下列命令,:,$awk-f course.awk reg.dat,执行结果如下,:,Graphics 2,O.S.2,Discrete 3,A.I.1,D.S.1,Arch.2,Algorithm 2,awk,函数的使用,awk,BEGIN,arrival=HM_to_M($2,$3),END,function HM_to_M(hour,min),return hour*60+min,$*,本章小结,1.awk,编程的作用,2.awk,的,pattern,3.awk,的,action,4.awk,的,BEGIN,5.awk,的,END,6.awk,的内建变量和内建函数的使用,7.awk,中数组和自定义函数的使用,课后练习,1.,查看系统中与用户有关的三个文件,(1)/etc/passwd,(2)/etc/group,(3)/etc/shadow,2.,把,/etc/shadow,中的与,/etc/passwd,中相关的密码用,awk,自动替换到,/etc/passwd,中的第二列密码列中,Thank you!,
展开阅读全文