正则表达式中awk的学习和使用
AWK是一种优良的文本处理工具。它不仅是linux中也是任何环境中现有的功能最强大的数据处理引擎之一。这种编程及数据库访问语言(其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母)的最大功能取决于一个人所拥有的知识
四、AWK的内置环境变量
六、 AWK元字符:(转义字符)、^ $ [] |* + ?。其中+和?只能在AWK中使用不能再sed和grep中使用。+表示匹配一个或多个字符;?表示匹配0或1个字符。 七、例子 俗话说,看的多不如动手多。让我们来通过例子加深理解和记忆吧。练起来 1、awk '{if($1="I")print $0}' greptest ###表示如果第一个字段为I就打印改行信息 2、awk '{if ($0~/good/)print $0}' greptest ###如果哪行信息可以匹配good就打印哪行信息 3、awk '{if ($0~/^[^A-Za-z]/)print $0}' greptest ###如果哪行行首是非字母就匹配哪行然后打印该行信息 $0在这里代表的是行信息内容。^平方号在[]大括号外表示行首,在内表示非。 4、awk '{if($0~/good|gold/)print $0}' greptest ###如果哪行匹配good或gold就打印改行内容 5、 awk '{if($0~/go+/)print $0}' greptest ###匹配g后一个或一个以上o字母。如good gold 6、 awk '{if($0~/go?/)print $0}'greptest ###匹配g后零个或一个字母o。如go、girl而不是good 7、awk'{if($5==1024)print $0}' llvar ###匹配第五段(域)等于1024的行并打印该行 8、awk'{if($2<9 && $9~/o/)print $0}'llvar ###匹配第二段(域)小于9,并且第九段匹配字母o 9、awk '{print NF,NR,$NF,$0}' greptest ###打印几个段,行号,最后一个段内容,该行信息。 其中NF表示默认以空格为分割符分割为几个段;NR表示该行行号;FS表示分隔符赋值 10、awk '{print NF,$0,FILENAME}' greptest ###同上,FILENAME是文件名 11、awk 'BEGIN{FS=":"}{print NF,$0}END{print FILENAME}' /etc/passwd分隔符=冒号 12、awk 'BEGIN{a=3;a+=2;print a}' ###答案是5。+=2的意思是加2等于,其他/=、%=同样 13、 awk 'BEGIN{a=3;b=4;a>b?b=a:a=b print a,b}' 答案是4,4。表示a大于b吗,如是把a值赋给b 14、 awk 'BEGIN{a=3;print --a;print a;print a--;print a}' 答案分别是2,2,1。注意a--的值。 15、 awk 'BEGIN{a=3;print ++a;print a;print a++;print a}' 答案是4,4,5。同上一样的道理。 16、awk 'sub("good","GOOD"){print $0}' greptest ###每行匹配第一个good,然后替换为GOOD 17、awk'sub("ou","OU",$2){print $0}'greptest ###匹配每行的第二段为ou,然后替换成OU。 18、awk'{print index($0,"good"),$0}' greptest ###查找good在行中是第几位。返回数值。 19、awk'{print match($0,"good"),$0}greptest' #该行是否包含good,如果包含返回在行中的位置 20、 awk'BEGIN{print split("0421-8888-666",aa,"-");print aa[1],aa[2],aa[3]}'答案是30421 8888 666。split函是把字符串"0421-8888-666"用分隔符"-"分出来放在aa数组里。返回值是多少段。 21、awk 'BEGIN gsub("2","9"$5);{print $0}' greptest ###替换每行中第五段凡是2的换为9, g表全部。 22、awk 'BEGIN {print substr($0,1,5)' greptest ###取出每行的第一到第五位字符。 23、awk 'BEGIN {print sprintf("%10.4f",3.1415926)}' ###答案是连续四个空格3.1416。表示是个字符,小数位数为4位。默认使用右对齐格式,如用左对齐加"-"中划线。如下例。 24、 awk'BEGIN {print sprintf("%-8d%-8i",123,4567)}'答案是123五个空格4567四个空格 如果上面的这些例子没有BEGIN选项的要加入文件名,有文件名的可以省去BEGIN。可以试试上面的不加BEGIN是什么效果,一旦执行 awk' {print sprintf("%-8d%-8i",4567)}'(没有BEGIN)提示符一直会等待输入,敲回车会显示结果但还是停在那儿等待输入。 25、 以下是一个awk的脚本,该脚本的目的主要是把/etc/passwd文件分段对齐。脚本先指定了一个分隔符,利用分隔符把/etc/passwd分成不同的段,然后使用格式输出工具排序对齐。
以上脚本信息保存为passwd.awk文件,并赋予执行权限。使用命令./passwd.awk /etc/passwd执行。显示结果是按UsernameFullnameUIDGIDUserhome shell等顺序排序格式对齐的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |