版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、linux三剑客之awk精讲(基础与进阶)标签(空格分隔):linux实战教学笔记陈思齐快捷跳转目录:*第1章:awk基础入门4)1.1:awk简介* 1.2:学完awk你可以掌握:* 1.3:awk环境简介* 1.4:awk的格式5)1.5:模式动作* 1.6:awk的执行过程*1.6.1:小结awk执行过程*1.7:记录和字段6)1.7.1:记录(行)* 1.7.2:记录分隔符-rs* 1.7.3:对$0的认识* 1.7.4:企业面试题7)1.7.5:awk记录知识小结 *1.7.6:字段(列)* 1.7.7:ors与ofs简介* 1.9:awk基础入门总结*第2章:awk进阶*2.1:a
2、wk模式与动作*2.2:正则表达式作为模式*2.2.1:awk正则匹配操作符*2.2.2:awk正则表达式匹配整行8)2.2.3:awk正则表达式匹配一行中的某一列*2.2.4:某个区域中的开头和结尾* 2.2.5:创建测试环境* 2.2.6:测试文件说明*2.2.7:awk正则表达式练习题*2.2.& awk正则表达式练习题详解*2.2.9:企业面试题*2.2.10:明明白白扩展正则表达式:+ (加号)*2.2.11:awk正则之花括号*2.2.12:企业案例2*2.2.13:企业案例2*2.3:比较表达式做为模式需要一些例子*2.3.1:企业面试题*2.3.2:如果判断某一列是否等
3、于某个字符呢?*2.4:范围模式* 2.5:awk特殊模式-begin模式与end模式9)2.5.1:begin模块* 2.5.2:awk屮变量的概念简介*2.5.3:end模块*2.6:awk屮的动 作10)2.7:awk模式与动作小结*2.&总结awk执行过程11)2.9:awk数组* 2.10:图片数组第1章awk基础入门要弄懂awk程序,必须熟悉了解这个工具的规则。本实战笔记的目的是通过实际案例或面 试题带同学们熟练掌握awk在企业中的用法,而不是awk程序的帮助手册。1.1 awk简介一种名字怪异的语言模式扫描和处理awk不仅仅时linux系统中的一个命令,而且是一种编程语言
4、,可以用来处理数据和生成报 告(excel) o处理的数据可以是一个或多个文件,可以是来自标准输入,也可以通过管道 获取标准输入,awk可以在命令行上直接编辑命令进行操作,也可以编写成awk程序来进行 更为复杂的运用。本章主要讲解awk命令的运用。1.2学完awk你可以掌握:记录与字段 模式匹配:模式与动作基本的a wk执行过程awk常用内置变量(预定义变量)awk数组(工作常用)awk语法:循环,条件awk常用函数向awk传递参数awk引用shell变量awk小程序及调试思路2.5.1 awk坏境简介rootchensiqil # cat /etc/redhat-releasecentos
5、release 6.8 (final)rootchensiqil # unamer2.6.32-642.el6.x86_64rootchensiqil # ii which awkirwxrwxrwx1 root root 4 dec 23 20:25 /bin/awk - gawkrootchensiqil # awk -versiongnu awk 3.1.7copyright (c) 1989,1991-2009 free software foundation.this program is free software; you can redistribute it and/or m
6、odifyit under the terms of the gnu general public license as published by the free software foundation;either versi on 3 of the lice ns巳or(at your option) any later version.this program is distributed in the hope that it will be useful,but without any warranty; without even the implied warranty ofme
7、rchantability or fitness for a particular purpose. see thegnu general public license for more detailsyou should have received a copy of the gnu general public license along with this program. if not,see.2.5.2 awk的格式awk指令是由模式,动作,或者模式和动作的组合组成。模式既pattern,可以类似理解成sed的模式匹配,可以由表达式组成,也可以是两个正斜杠 之间的正则表达式。比如nr
8、=1,这就是模式,可以把他理解为一个条件。动作即action,是由在大括号里面的一条或多条语句组成,语句之间使用分号隔开。比如awk使用格式:awk处理的内容可以来自标准输入(=2 & nr=2&nr=2&nrv=6 /etc/passwdbin:x:l:l:bin:/bin:/sbin/nologi ndaemon:x:2:2:daem on:/sbi n:/sbi n/nologi nadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologi nsync:x:5:0:sync
9、:/sbi n:/bin/sync命令说明:f指定分隔符为冒号nr=2&nr /server/files/awkfile.txtrootchensiqil # cat /server/files/awkfile.txt root:x:0:0:root:/root:/bin/bashbin:x:l:l:bin:/bin:/sbin/nologi ndaemon:x:2:2:daem on:/sbin:/sbi n/nologinadm:x:3:4:adm:/var/adm:/sbi n/nologinip:x:4:7:lp:/var/spool/lpd:/sbin/nologi nsyn
10、 c:x:5:0:sync:/sbi n:/bin/syncshutdow n:x:6:0:shutdow n:/sbin:/sbi n/shutdow nhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/no loginuucp:x:10:14:uucp:/var/spool/uucp:/sbi n/nologin这个文件仅包含十行文件,我们使用下面的命令:示例1-6 awk执行过程演示rootchensiqil # awk,nr=2print $0* /server/fiies/awkfiie.tx
11、t bin:x:l:l:bin:/bin:/sbin/nologi ndaemo n:x:2:2:daem on:/sbin:/sbin/nologi nadm:x:3:4:adm:/var/adm:/sbin/nologi nlp:x:4:7:lp:/var/spool/lpd:/sbin/nologi nsyn c:x:5:0:sync:/sbi n:/bin/s yncshutdow n:x:6:0:shutdown:/sbi n:/sbi n/shutdow nhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mai
12、l:/sbin/no loginuucp:x:10:14:uucp:/var/spool/uucp:/sbi n/no login命令说明:条件nr=2,表示行号大于等于2时候,执行print $0显示整行。awk是通过一行一行的处理文件,这条命令中包含模式部分(条件)和动作部分(动作),awk将处理模式(条件)指定的行1.6.1小结awk执行过程1)awk读入第一行内容2)判断是否符合模式中的条件nr=21.7.7如果匹配则执行对应的动作print $01.7.8如果不兀配条件,继续读取下一行3)继续读取下一行4)重复过程13,直到读取到最后一行(eof:end of file)1.7记录和
13、字段接下来我给大家带来两个新概念记录和字段,这里为了方便大家理解可以把记录就当作行即 记录=行,字段相当于列,字段=列。名称 含义recordi己录,tffield域,区域,字段,列1.7.1记录(行)查看一下下面这段文字root:x:0:0:root:/root:/bin/bashbin:x:l:l:bin:/bin:/sbin/nologi ndaemon:x:2:2:daem on:/sbi n:/sbi n/nologi nadm:x:3:4:adm:/var/adm:/sbin/nologi nlp:x:4:7:lp:/var/spool/lpd:/sbin/nologi nsync
14、:x:5:0:sync:/sbi n:/bin/syncshutdown:x:6:0:shutdow n:/sbin:/sbi n/shutdow nhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/no login uucp:x:10:14:uucp:/var/spool/uucp:/sbi n/no login思考:一共有多少行呢?你如何知道的?通过什么标志?awk对每个要处理的输入数据认为都是具有格式和结构的,而不仅仅是一堆字符串。默认情 况下,每一行内容都是一条记录,并以换行符分隔(n)结束1.
15、7.2记录分隔符rs awk默认情况下每一行都是一个记录(record)rs既record separator输入输出数据记录分隔符,每一行是怎么没的,表示每个记录输入的 时候的分隔符,既行与行之间如何分隔。nr既number of record记录(行)号,表示当前正在处理的记录(行)的号码。ors既output record separator输出记录分隔符。awk使用内置变量rs来存放输入记录分隔符,rs表示的是输入的记录分隔符,这个值可以 通过begin模块重新定义修改。示例1-1:使用“/”为默认记录分隔符示例文件:rootchensiqil # cat /server/files/
16、awkfile.txtroot:x:0:0:root:/root:/bin/bashbin:x:l:l:bi n:/bin:/sbin/n ologi ndaemon:x:2:2:daem on:/sbin:/sbi n/nologi nadm:x:3:4:adm:/var/adm:/sbi n/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologi nsyn c:x:5:0:s yn c:/sbi n:/bin/sync shutdown:x:6:0:shutdown:/sbi n:/sbi n/shutdow nhalt:x:7:0:halt:/sbi
17、n:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbi n/no loginrootchensiqil # awk beginrs=/print nr,$0 /server/files/awkfile.txtroot:x:0:0:root:root:binbashbin:x:l:l:bin:bin:sbinnologindaem on :x:2:2:daemon:sbin:sbinno loginadm:x:3:4:adm:varadm:sbinnolog
18、inlp:x:4:7:lp:varspoolipd:sbinno loginsyn c:x:5:0:s ync:sbin:bi nsyncshutdow n:x:6:0:shutdow n:sbin:sbinshutdownhalt:x:7:0:halt:sbin:sbinhaltmail:x:8:12:mail:varspoolmail:sbinno loginuucp:x:10:14:uucp:varspooluucp:sbinno login命令说明:在每行的开始先打印输出nr(记录号行号),并打印出每一行$0(整行)的内容。我们设置rs(记录分隔符)的值为“ / ”,表示一行(记录)以
19、“ / ”结束在awk眼中,文件是从头到尾一段连续的字符串,恰巧中间有些n(回车换行符),门也 是字符哦。我们回顾下“行(记录)”到底是什么意思?行(记录):默认以n(回车换行)结束。而这个行的结束不就是记录分隔符嘛。所以在awk中,rs(记录分隔符)变量表示着行的结朿符号(默认是回车换行)在工作中,我们可以通过修改rs变量的值来决定行的结束标志,最终來决定“每行”的内 容。为了方便人们理解,awk默认就把rs的值设置为“n”注意:awk的begin模块,我会在后面(模式-begin模块)详细讲解,此处大家仅需要知道在begin模块里面我们来定义一些awk内置变量即可。1.7.3对$0的认识如
20、1.7.2的例子,可以看出awk中$0表示整行,其实awk使用$0来表示整条记录。记录分 隔符存在rs变量屮,或者说每个记录以rs内置变量结束。另外,awk对每一行的记录号都有一个内置变量nr来保存,每处理完一条记录,nr的值就 会自动+1下面通过示例來加深印象。示例l-2:nris录号rootchensiqil # awk print nr,$0 /server/files/awkfile.txt troot:x:0:0:root:/root:/bin/bash tbin:x:l:l:bin:/bin:/sbin/nologin tdaemon:x:2:2:daemon:/sbin:/sbi
21、n/nologin tadm:x:3:4:adm:/var/adm:/sbin/nologin tlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin tsync:x:5:0:sync:/sbin:/bin/sync tshutdown:x:6:0:shutdown:/sbin:/sbin/shutdown thalt:x:7:0:halt:/sbin:/sbin/halt tmail:x:8:12:mail:/var/spool/mail:/sbin/nologin tuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin命
22、令说明:nr既number of record,当前记录的记录号,刚开始学也可以理解为行号。$0表示整行或者说整个记录1.7.4企业血试题:按单词出现频率降序排序(计算文件中每个单词的重复数量)注:(此处使用sort与uniq即町)题目:题目创建方法:sed -r l,10s#aa-za-z+# #g /etc/passwd/server/files/count.txtrootchensiqil files# cat /server/files/count.txtroot x root root bin bashbin x bin bin sbin nologindaemon x daemon
23、 sbin sbin no loginadm x adm var adm sbin nologinip x ip var spool ipd sbin nologinsync x sync sbin bin syncshutdown x shutdown sbin sbin shutdownhalt x halt sbin sbin haltmail x mail var spool mail sbin nologinuucp x uucp var spool uucp sbin nologin思路:让所有单词排成一列,这样每个单词都是单独的一行1)设置rs值为空格2)将文件里面的所有空格替换
24、为回车换行符“n”3)grep所有连续的字母,grep -o参数让他们排成一列。方法一:rootchensiqil files# awk beginrs= +print $0 count.txt | sort |uniq -c|sort1bashllpddaemon2 ip3 admhalt3 mail3 root3 shutdown3 spool3 sync3 uucp4 var5 bin6 nologin10 x12 sbin方法二:rootchensiqil files# cat count.txt | tr nh| sort | uniq -c | sort1)bashllpd2)da
25、emon2 ip3 adm3 halt3 mail3 root3 shutdown3 spool3 sync3)uucp4)var5)bin6)nologin10 x12 sbin方法三:rootchensiqil files#grep -o a-za-z+ count.txt | sort | uniq -c | sort2.1 bashllpd2.2 daemon2 ip3 adm3 halt3 mail3 root3 shutdown3 spool3 sync2.3 uucp2.4 var2.5 bin2.6 nologin10 x12 sbin1.7.5 awk记录知识小结nr存放着每
26、个记录的号(行号)读取新行时候会自动+1rs是输入数据的记录的分隔符,简单理解就是可以指定每个记录的结尾标志。rs作用就是表示一个记录的结束当我们修改了rs的值,最好配合nr(行)來查看变化,也就是修改了rs的值通过nr查 看结果,调试awk程序。ors输出数据的记录的分隔符awk学习技巧一则:大象放冰箱分几步?打开冰箱,把大象放进去,关闭冰箱门。awk也是一样的,一步一步來,先修改yrs,然后用nr调试,看看到底如何分隔的。然后 通过sort排序,uniq -c去重1.7.6字段(列)每条记录都是由多个区域(field)组成的,默认情况下区域之间的分隔符是由空格(即空格 或制表符)来分隔,并
27、且将分隔符记录在内置变量fs中,每行记录的区域数保存在awk的 内置变量nf屮。fs既field separator,输入字段(列)分隔符。分隔符就是菜刀,把一行字符串切为很多个区 域。nf既number of fileds,表示一行屮列(字段)的个数,可以理解为菜刀切过一行后,切成 了多少份。ofs输出字段(列)分隔符awk使用内置变量fs来记录区域分隔符的内容,fs可以在命令行上通过-f参数來更改, 也 可以通过begin模块来更改。然后通过$6门是整数,来取被切割后的区域,$1取第一个区域,$2取第二个区域,$nf取 最后一个区域。下面我们通过示例來加强学习。示例3:指定分隔符rootc
28、hensiqil files# awk -fnr=2&nr/server/files/awkblank.txtrootchensiqil files# files# awk print $1 /server/files/awkblank.txtinet#指定分隔符时候rootchensiqil files# awk -f :+ print $1 /server/files/awkblank.txt rootchensiqil files# awk-f :+ print $2* /server/files/awkblank.txt inet命令说明:awk默认的fs分隔符对于空格序列,一
29、个空格或多个空格tab都认为是一样的,一个整体。 这个文件的开头有很多连续的空格,然后才是inet这个字符当我们使用默认的分隔符的时候,$2是有内容的。当我们指定其他分隔符(非空格)时候,区域会有所变化到底为何会这样,我们在这里不再深入研究,只要了解有这种情况,注意一下即可。rs与ofs简介现在说说ors和ofs这两个内置变量的含义。rs是输入记录分隔符,决定awk如何读取或分隔每行(记录)ors表示输出记录分隔符,决定awk如何输出一行(记录)的,默认是回车换行(n)fs是输入区域分隔符,决定awk读入一行后如何再分为多个区域。ofs表示输出区域分隔符,决定awk输出每个区域的时候使用什么分
30、隔她们。awk无比强大,你可以通过rs, fs决定awk如何读取数据。你也可以通过修改ors, ofs的值指定awk如何输出数据。1.8字段与记录小结现在你应该会对awk的记录字段有所了解了,下而我们总结一下,学会给阶段性知识总结 是学好运维的必备技能。rs记录分隔符,表示每行的结束标志nr行号(记录号)fs字段分隔符,每列的分隔标志或结朿标志nf就是每行有多少列,每个记录中字段的数量$符号表示取某个列(字段),$1$2$nfnf表示记录中的区域(列)数量,$nf取最后一个列(区域。)fs (-f)字段(列)分隔符,f (fs)“:” beginfs=y rs记录分隔符(行的结朿标识)nr行号
31、选好合适的刀fs (*) ,rs,ofs,ors分隔符= 结束标识记录与区域,你就对我们所谓的行与列,有了新的认识(rs, fs)1.9 awk基础入门总结到了这里我们回头看看,我们z前学习的内容。awk的命令行结构awk的模式和动作awk的记录和字段比较核心常用的是字段。另外这些金业面试题可是学会awk的必备,必须自己也能写出來。第2章awk进阶1awk模式与动作接下来就详细介绍下,awk的模式都有几种: 正则表达式作为模式比较表达式作为模式范围模式特殊模式begin和endawk的模式是你玩好awk的必备也是最基础的内容,必须熟练掌握2.2正则表达式作为模式awk同sed-样也可以通过模式
32、匹配来对输入的文本进行匹配处理。 说到模式匹配, 肯定少 不了正则表达式,awk也支持大量的正则表达式模式,大部分与sed支持的元字符类似,而 且正则表达式是玩转三剑客的必备工具,下表列出了awk支持的正则表达式元字符:awk默认就支持的元字符:元字符功能 示例 解释a字符串开头/achensiqi/或$3chensiqi/匹配所有以chensiqi开头的字符串;匹配出所有第三列屮以chensiqi开头的$字符串结尾/chensiqi$/或$3/chensiqi$/匹配所有以chensiqi结尾的字符串;匹配第三 列中以chensiqi结尾的.(点)匹配任意但个字符(包括回车符)/c.i/匹配
33、字母c,然后两个任意字符,再以i结尾 的行/a*cool/匹配0个或多个a z后紧跟着cool的行/a+b/匹配一个或多个a加上字符串b的行/a?b/兀配以字母a或b或c开头的行匹配指定字符组内的任一个字符abc/匹配以字母a或b或c开头的行八匹配不在指定字符组内的任一字符 卜abc/匹配不以字母a或b或c开头的行() 子表达式组合/(chensiqi)+/表示一个或多个cool组合,当有一些字符需要组合时,使用括号括起来 | 或者的意思/(chensiqi) | b/叽配chensiqi或字母b的彳亍awk默认不支持的元字符: (参数-posix)元字符功能 示例 解释xmx字符重复m次/c
34、ool5/匹配i字符5次xm,x字符重复至少m次/(cool)2,/匹配cool整体,至少2次xm,nx字符重复至少m次,但不超过n次/(cool)5,6/匹配cool整体,至少5次, 最多6次提不: 加插号代表整体匹配,不加那么就匹配前边的一个字符。awk默认不支持这种形式的正则, 需要加-posix参数或者-re-interval正则表达式的运用,默认是在行内查找匹配的字符串,若有匹配则执行action操作,但是有 时候仅需要固* 重复0个或多个前一个字符 + 重复前一个字符一次或多次? 匹配0个或一个前边的字符定的列来匹配指定的正则表达式,比如:我想取/etc/passwd文件中第五列$
35、5这一列查找匹配mail字符串的行,这样就需要用另外两个匹配操作符,并且awk里面只有 这两个操作符来兀配正则表达式。2awk正则匹配操作符awk正则匹配操作符:|用于对记录或区域的表达式进行匹配iitt|!|用于表达与相反的意思|下面还是通过具体示例来看看,awk如何来通过正则表达式匹配字符串的3awk正则表达式兀配整行rootchensiqil files# awk -f : root/ awkfile.txtroot:x:0:0:root:/root:/bin/bash和下面的效果是一样的rootchensiqil files# awk -f$0/aroot/ awkfile.txtro
36、ot:x:0:0:root:/root:/bin/bash提示:awk只用正则表达式的时候是默认匹配整行的即,$0/woot/和/moot/是一样的。4awk正则表达式匹配一行屮的某一列rootchensiqil files# awk -f$5/shutdown/ awkfile.txtshutdown:x:6:0:shutdow n:/sbi n:/sbin/shutdow n提示:$5表示第五个区域(列)表示匹配(正则表达式匹配)/shutdown/表示匹配shutdown这个字符串合并在一起$5/shutdown/表示第五个区域(列)匹呪正则表达式/shutdown/,既第5列包含shu
37、tdown这个字符串,则显示这一行。2.2.4某个区域屮的开头和结尾知道了如何使用正则表达式匹配操作符之后,我们來看看awk正则与grep和sed不同的地 方。awk正则表达式|竹匹配一个字符串的开头|i i i|$|匹配一个字符串的结尾i在sed和grep这两个命令中,我们都把它们当作行的开头和结尾。但是在awk屮他表示的 是字符串的开头和结尾。接下來我们通过练习题來联系awk如何使用正则表达式。2.2.5创建测试环境rootchensiqil # cat dandan41117397:250:100:175zhang xiaoyu390320151:155:90:201mengfeixue
38、80042789:250:60:50wuwaiwai70271111:250:80:75liubingbi ng41117483:250:100:175wangxiaoai3515064655:50:95:135zigege1986787350:250:168:200liyoujiu918391635:175:75:300laonanhai918391635:250:100:175kof2.2.6测试文件说明zhang dandan41117397:250:100:175zhang xiaoyu390320151:155:90:201mengfeixue80042789:250:60:50wu
39、waiwai70271111:250:80:75liubingbing41117483:250:100:175wangxiaoai3515064655:50:95:135zigege1986787350:250:168:200liyoujiu918391635:175:75:300laonanhai918391635:250:100:175说明:第一列是姓氏第二列是名字笫一列笫二列合起来就是姓名第三列是对应的id号码最后三列是三次捐款数量2.2.7 awk正则表达式练习题练习题1:显示姓zhang的人的第二次捐款金额及她的名字练习题2:显示xiaoyu的名字和id号码练习题3:显示所有以41开
40、头的id号码的人的全名和id号码练习题4:显示所有以一个d或x开头的人名全名练习题5:显示所有id号码最后一位数字是1或5的人的全名练习题6:显示xiaoyu的捐款,每个值都有以$开头。如$520$200$135练习题7:显示所有人的全名,以姓,名的格式显示,如meng, feixue2.2.8 awk正则表达式练习题详解示例1:显示姓zhang的人的第二次捐款金额及她的名字rootchensiqil files# cat reg.txtrootchensiqil files# awk -f :+ $l/azhang/print $2,$(nf-1) reg.txt zhang 100zhan
41、g 90说明:-f指定分隔符,现在大家知道了f即fs也是支持正则表达式的。【:】+表示连续的空格或冒号-f“【:】+”以连续的空格或冒号为分隔符/zhang/表示条件,整行屮包含dan字符的这个条件。print $1,$(nf-1)表示动作,满足条件后,执行显示第一列($1)和倒数第二列($(nf-1)当然$5也可以。注意:zhang dandanzhang xiaoyumeng feixue wuwaiwai liubingbing wangxiaoai zi gegeliyoujiulaonan hai41117397390320151800427897027111141117483351
42、50646551986787350918391635918391635:250:100:175:155:90:201:250:60:50:250:80:75:250:100:175:50:95:135:250:168:200:175:75:300:250:100:175nf是一行中有多少列,nf-1整行就是倒数第二列。$(nf-1)就是取倒数第二列内容。示例2:显示xiaoyu的姓氏和id号码rootchensiqil files#cat reg.txtzhang dandan41117397:250:100:175zhang xiaoyu 390320151:155:90:201meng f
43、eixue80042789:250:60:50wu waiwai 70271111:250:80:75liu bingbing 41117483:250:100:175wang xiaoai 3515064655:50:95:135zi gege1986787350:250:168:200li youjiu 918391635:175:75:300lao nanhai 918391635:250:100:175rootchensiqil files# awk -f :+ $2/axiaoyu/print $1,$3 reg.txt zhang 390320151命令说明:指定分隔符-f“【:】
44、+”$2/xiaoyu/表示条件,第二列包含xiaoyu时候执行对应的动作print $1,$3表示动作,显示第一列和第三列的内容 示例3:显示所有以41开头的id号码的人的全名和id号码rootchensiqil files# cat reg.txtzhang dandanzha ng xiaoyumeng feixuewu waiwai liubin gbing wangxiaoaizigegeliyoujiulaonan hai4111739739032015180042789702711114111748335150646551986787350918391635918391635:2
45、50:100:175:155:90:201:250:60:50:250:80:75:250:100:175:50:95:135:250:168:200:175:75:300:250:100:175rootchensiqil files# awk -f :+ *$3/a(41)/print $1,$2,$3* reg.txtzhang dandan 41117397liu bingbing 41117483示例4:显示所有以一个d或x开头的人名全名rootchensiqil files# cat reg.txtzhang dandanzhang xiaoyumeng feixuewu waiwa
46、i411173973903201518004278970271111:250:100:175:155:90:201:250:60:50:250:80:75rootchensiqil files# awk -fh:+11$2d |ax/print $1,$2 reg.txt zhang dandanzhang xiaoyuwang xiaoai命令说明:-f“【:】+ ”指定分隔符|表示或,八以开头注意:这里耍用()插号表示即a(d|x)相当于adpx,有的同学写成ad|x这样是错误的。示例5:显示所有id号码最后一位数字是1或5的人的全名rootchensiqil files# cat reg
47、.txtrootchensiqil files# awk -f :+ $3/1$ 15$/print $1,$2 reg.txtzhang xiaoyuwu waiwaiwang xiaoaili youjiulao nanhai示例6:显示xiaoyu的捐款,每个值都有以$开头。如$520$200$135rootchensiqil files# cat reg.txtuu bingbingwang xiaoai zigegeliyoujiu4111748335150646551986787350918391635:250:100:175:50:95:135:250:168:200:175:7
48、5:300lao nanhai918391635:250:100:175zhang dandanzha ng xiaoyumeng feixue wuwaiwai uubingbing wangxiaoai zi gegeliyoujiulao nanhai4111739739032015180042789702711114111748335150646551986787350918391635918391635:250:100:175:155:90:201:250:60:50:250:80:75:250:100:175:50:95:135:250:168:200:175:75:300:250
49、:100:175li youjiu 918391635:175:75:300lao nanhai 918391635:250:100:175rootchensiqil files# awk -f :+ $2/xiaoyu/printreg.txt$155$90$201示例7:显示所有人的全名,以姓,名的格式显示,如meng, feixue rootchensiqil files# catreg.txtzhang dandanzhang xiaoyumeng feixue wuwaiwai uubingbing wangxiaoai zi gegeliyoujiulao nanhai411173
50、9739032015180042789702711114111748335150646551986787350918391635918391635:250:100:175:155:90:201:250:60:50:250:80:75:250:100:175:50:95:135:250:168:200:175:75:300:250:100:175rootchensiqil files# awk -fh +hprintreg.txtzha ngda ndanzha ngxiaoyumen g,feixuewu,waiwailiu,bingbingwan g,xiaoaizi,gegeli,youj
51、iulao,na nhai2.2.9企业面试题:取出网卡etho的ip地址最简单:hostname -i awk处理:方法一:rootchensiqil files# ifconfig eth0|awk,beginrs=, :,nr=31,33方法二:rootchensiqil files# ifconfig etho | awk -f (addr:)|( beast:) nr=2print $233方法三:zhang dandanzhang xiaoyumeng feixue wuwaiwai liubingbing wangxiaoai
52、zi gege4111739739032015180042789702711114111748335150646551986787350:250:100:175:155:90:201:250:60:50:250:80:75:250:100:175:50:95:135:250:168:200rootchensiqil files# ifconfig etho | awk -fn:+ nr=2print $433方法四:rootchensiqil files# ifconfig etho | awk -fha0-9.+ nr=2print $23
53、3提示:前边的三种方法都还是比较好理解的, 这第四种方法, 需要学会逆向思维,看看我们要的结 果0, ip地址:数字和点(),我是否可以指定分隔符,以数字和点以外的字符为 分隔符呢?换句话说就是要排除数字和点 ( ) 正则表达式与排除常用的就是29.即不匹配数字和点 (.)最后f“八09”位分隔符,但是要使用+,表示连续的。合起来就是:awk -f“卜09.+” nr=2print $2*注意:正则表达式是玩好awk的必要条件,必会掌握2.2.10明明白白扩展正则表达式:+ (加号)rootchensiqil files# echo .=rootchensiqil files#
54、 echo -=| grep -=#=1#2rootchensiqil files# echo -=1#2 | grep -o -=#*#2.2.11 awk正则之花括号awk中的花括号有些不常用,但是偶尔会用到这里简单介绍。示例:収出awkfile中第一列包含一个o或者两个o的行rootchensiqil files# awk -f: $l/ol,2/ awkfile.txtrootchensiqil files# awk -f: -posix *$l/ol,2/ awkfile.txt root:x:0:0:root:/root:/bin/bashdaemon:x:2:2:daem on:
55、/sbin:/sbi n/nologinshutdown:x:6:0:shutdown:/sbin:/sbi n/shutdow nrootchensiqil files# awk -f: -re-interval sl/ofl/ awkfile.txt root:x:0:0:root:/root:/bin/bashdaem on :x:2:2:daem on:/sbin:/sbi n/nologinshutdown:x:6:0:shutdown:/sbin:/sbi n/shutdow n2.2.12企业案例1:取出常用服务端口号思路:linux下面服务与端口信息的对应表格在/etc/ser
56、vices里面,所以这道题要处s/etc/services文件。我们简单分析以下servics文件:rootche nsiqil # sed -n 23,30p /etc/servicestcpmuxl/tcp# tcp port service multiplexertcpmux1/udp# tcp port service multiplexerrje5/t卬# remote job entryde5/udp# remote job entryecho7/tcpecho7/udpdiscard9/tcpsink nulldiscard9/udpsink null从23行开始基本上每一行第一
57、列是服务名称,第二列的第一部分是端口号,第二列的第二部分是tcp或udp协议。方法:rootchensiqil # awk -f /+h*$1/a(ssh)$|a(http)$|a(https)$|a(mysql)$|a(ftp)$/print$1,$2* /etc/services |sort| uniqftp 21http 80https 443mysql 3306ssh 22提示:i是或者的意思,正则表达式sort是将输出结果排序uniq是去重复但不标记重复个数uniq -c去重复但标记重复个数2.2.13企业案例2:取出常用服务端名称同学们白己尝试下2.3比较表达式做为模式-需要一些例
58、子z前我们看了正则表达式在awk下的运用,下面再具体看看比较表达式如何在awk下工作。awk是一种编程语言,能够进行更为复杂的判断,当条件为真吋候,awk就执行相关的actiono主要是针对某一区域做出相关的判断,比如打印成绩在80分以上的行,这样就必须对这一 区域做比较判断,下表列出了awk可以使用的关系运算符,可以用來比较数字字符串,还 有正则表达式。当表达式为真时候,表达式结果1,否0,只有表达式为真,awk才执行相 关的action运算符含义 示例y= 小于等于x=大于或等于x=y 大于x=23&nrv=30 /etc/services rootwww # awk nr22&a
59、mp;nr22&nrv31/ /etc/servicestcpmux1/tcp# tcp port service multiplexertcpmux1/udp# tcp port service multiplexerde5/tcp# remote job entryrje5/udp# remote job entryecho7/tcpecho7/udpdiscard9/t卬sink nulldiscard9/udpsink null说明:1)比较表达式比较常用的还是表示大于等于,小于等于或者等于,根据这个例子来学习即 可2)nr表示行号,大于等于23即,nr=23小于等于30,即n
60、r=23并且nrv二30,&表示并月.,同时成立的意思。4)换一种表达式方法就是大于22行小于31行,即nr22&nrv312.3.2如杲判断某一列是否等于某个字符呢?示例:找出/etc/passwd中第五列是root的行测试文件:rootwww # cat /server/files/awk_equal.txt root:x:0:0:root:/root:/bin/bashroot:x:0:0:rootroot:/root:/bi n/bash root:x:0:0:rootrooot:/root:/bin/bashroot:x:0:0:rootrooot:/root:/bi n/bash root:x:0:0:/root:/bin/bash答案:awk -
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产品助理面试题及竞品分析方法含答案
- 财务管理招聘全解析及答案集
- 软件测试工程师的成长路径与技能提升
- 市场专员面试要点及题目参考
- 税务客服专员培训题库与答案参考
- 刀具存储项目可行性分析报告范文(总投资12000万元)
- 深度解析(2026)《GBT 18793-2002信息技术 可扩展置标语言(XML)1.0》
- 深度解析(2026)《GBT 18737.4-2003纺织机械与附件 经轴 第4部分织轴、整经轴和分段整经轴边盘的质量等级》
- 针对BIM技术的负责人面试题集
- 中航工业安全工程师笔试题库及解析
- 切尔诺贝利核电站事故工程伦理分析
- 初中地理七年级上册第七章第四节俄罗斯
- 法院起诉收款账户确认书范本
- 课堂观察与评价的基本方法课件
- 私募基金内部人员交易管理制度模版
- 针对低层次学生的高考英语复习提分有效策略 高三英语复习备考讲座
- (完整)《走遍德国》配套练习答案
- 考研准考证模板word
- 周练习15- 牛津译林版八年级英语上册
- 电力电缆基础知识课件
- 代理记账申请表
评论
0/150
提交评论