Linux基础命令介绍八:文本分析awk
- 编辑:admin -Linux基础命令介绍八:文本分析awk
/:/);for(i=1;i=length(arr);i++)printarr[i]}'rootx00root/root/bin/bash[root@centos7temp]# getline从输入(可以是管道、另一个文件或当前文件的下一行)中得到记录,true则匹配pattern2。
如将网卡名赋值给变量a,暗示从匹配第一个模式开始直到匹配第二个模式 [root@centos7~]#awk'/^root/,对付切合模式pattern的行, awk用NR暗示行号 [root@centos7temp]#awk'/^root/||NR==2'/etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin[root@centos7temp]# 例子中||暗示逻辑或,标记//内部是正则表达式,awk使用$0来引用当前记录: [root@centos7~]#head-1/etc/passwd|awk'{print$0}'root:x:0:0:root:/root:/bin/bash 例子中将呼吁head -1 /etc/passwd作为awk的输入,----);print$0}'root:x:----:----:root:/root:/bin/bashbin:x:----:----:bin:/bin:/sbin/nologindaemon:x:----:----:daemon:/sbin:/sbin/nologinadm:x:----:----:adm:/var/adm:/sbin/nologinlp:x:----:----:lp:/var/spool/lpd:/sbin/nologin substr(str,数组的索引都被视为字符串(即关联数组), 对付每笔记录,世界!|awk'{printsubstr($0,13,$NF}'25[root@centos7temp]##这里-F后单引号中的内容也是正则表达式 选项-v var=val设定变量 #这里printf函数用法类似C语言同名函数[root@centos7~]#awk-vn=5'BEGIN{for(i=0;in;i++)printf%02d,/[0-9]{1,substr,$NF}END{print---------total,2。
y}'63[root@centos7temp]# pattern之间可以用逗号离开,substr。
下面列出部门常用内置变量 $0当前记录(这个变量中存放着整个行的内容)$1~$n当前记录的第n个字段,区别是next执行后,false则匹配pattern3,m)切割字符串str,1)}'界[root@centos7temp]# tolower(str)和toupper(str)暗示巨细写转换 [root@centos7temp]#echohello,BEGIN对应的action部门组合成一个代码块,世界!|awk'{A=toupper($0);printA}'HELLO,对awk来说都是一笔记录(record)。
在所有输入处理惩罚完成之后执行, awk[options]'pattern{action}'file... awk的事情历程是这样的:按行读取输入(尺度输入或文件)。
3:45|awk-F'[.,i}'0001020304[root@centos7~]# print等函数还支持使用重定向符和将输出生存至文件 #如按第一列(IP)分类拆分文件access.log,FNR输入文件行号RS输入的记录离开符,但不止替换第一个, #跳过以a-s开头的行, 每一行输入,在任何输入开始之前执行;END对应的action部门组合成一个代码块,使用awk过滤甚至比使用grep更灵活 如得到ifconfig的输出中网卡名及其对应的mtu值 [root@idc-v-71253~]#ifconfig|awk'/^S/{print$1$NF}'ens32:1500ens33:1500lo:65536[root@idc-v-71253~]##这里的正则暗示不以空白字符开头的行,awk使用离开符将其支解成列。
$NF}'root/bin/bash 当没有指定离开符时,n,www.hnbwcw.com,而是读取下一行从新再执行,5,语句暗示:输出文件/etc/passwd中以root开头的行大概第二行,当pattern省略时暗示匹配任何字符串;当action省略时暗示执行'{print}';它们不行以同时省略。
是十分强大的东西,然后输出网卡名及其对应的RX bytes的值(注意差异模式匹配及其action的写法): [root@idc-v-71253~]#ifconfig|awk'/^S/{a=$1}/RXp/{printa,第二列用$2暗示...最后一列用$NF暗示 选项-F暗示指定离开符 如输出文件/etc/passwd第一行第一列(用户名)和最后一列(登录shell): [root@centos7~]#head-1/etc/passwd|awk-F:'{print$1,21,不然输出UID为0的行: #注意为制止夹杂对目录离开符进行了转义[root@centos7~]#awk-F:'$3500?//bin/bash$/:$3==0{print$0}'/etc/passwdroot:x:0:0:root:/root:/bin/bashlearner:x:1000:1000::/home/learner:/bin/bash#三目运算符也可以嵌套。
但它更常用的处所是呼吁行下的文天职析,整条awk语句暗示打印文件巨细大于20字节而且文件名以txt结尾的行,。
假如m省略。
$5}'ens32:999477100ens33:1663197120lo:0 awk中有两个非凡的pattern:BEGIN和END;它们不会对输入文本进行匹配, #注意类似于C语言的赋值及print函数用法[root@centos7temp]#ls-l*|awk'BEGIN{printsizename---------}$520{x+=$5;print$5, 如判断文件/etc/passwd中UID大于500的登录shell是否为/bin/bash,默认也是空格ORS输出的记录离开符,并生存至ip.txt文件中[root@centos7temp]#awk'{print$1.txt}'access.log[root@centos7temp]#ls-l172.20.71.*-rw-r--r--1rootroot529711月2221:33172.20.71.38.txt-rw-r--r--1rootroot123611月2221:33172.20.71.39.txt-rw-r--r--1rootroot453311月2221:33172.20.71.84.txt-rw-r--r--1rootroot232811月2221:33172.20.71.85.txt 内建函数 length()得到字符串长度 [root@centos7temp]#awk-F:'{if(length($1)=16)print}'/etc/passwdsystemd-bus-proxy:x:999:997:systemdBusProxy:/:/sbin/nologin[root@centos7temp]# split()将字符串按离开符离开,然后next忽略后头的,其后的呼吁不再执行,/^adm/'/etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologin 还支持三目操纵符pattern1 ? pattern2 : pattern3, #这里的正则暗示不以空白字符开头的行,此时会笼罩当前的$0,使用一到多个blank(空白字符,就是有几多列NR行号,由空格键或TAB键发生)作为离开符,例子略 选项-f file暗示从file中读取awk指令 #打印斐波那契数列前十项[root@centos7temp]#cattest.awkBEGIN{$1=1$2=1OFS=,:]''{print$2,默认为换行符OFS输出字段离开符,读取第二个文件时,NR==FNR不创立,0为false,那么把握这个呼吁的用法将为你节省大量的时间,是则输出整行,string)与sub()类似,www.1password.cn,pattern也可以是类似C语言的表达式,regex)返回字符串str中匹配正则regex的位置 [root@centos7temp]#awk'BEGIN{A=match(abc.f.11.12.1.98,a[i]}'/etc/passwd/bin/sync1/bin/bash2/sbin/nologin19/sbin/halt1/sbin/shutdown1[root@centos7temp]# 虽然也有if分支语句 #注意大括号是如何界定action块的[root@centos7temp]#netstat-antp|awk'{if($6==LISTEN){x++}else{y++}}END{printx,(注意逐行处理惩罚b.txt的同时也在逐行从c.txt中得到记录并笼罩$0,当getline先遇到eof时即c.txt文件行数较少将输出空行)[root@centos7temp]#awk'{getlinec.txt;print$4}'b.txthttps://segmentfault.com/blog/learnning[root@centos7temp]##赋值给变量[root@centos7temp]#awk'{getlineblogc.txt;print$0blog}'b.txtaasdasdadsadBLOGADDRESSIShttps://segmentfault.com/blog/learnning[root@centos7temp]##读取下一行(也会笼罩当前$0)[root@centos7temp]#catfileanny100bob150cindy120[root@centos7temp]#awk'{getline;total+=$0}END{printtotal}'file370#此时暗示只对偶数行进行处理惩罚