良许Linux教程网 Linux命令大全 Linux命令-awk命令详解

Linux命令-awk命令详解

u=1060085074,1991934751&fm=26&gp=0

awk是一款文本分析工具awk相对于grep、sed来说显得尤为强大,awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息。

awk内置变量

 ARGC        命令行参数个数``ARGV        命令行参数排列``ENVIRON      支持队列中系统环境变量的使用``FILENAME      ``awk``浏览的文件名``FNR        浏览文件的记录数``FS         设置输入域分隔符,等价于命令行 -F选项``NF         浏览记录的域的个数``NR         已读的记录数``OFS        输出域分隔符``ORS        输出记录分隔符``RS         控制记录分隔符``$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。
 $NF是number finally,表示最后一列的信息,跟变量NF是有区别的,变量NF统计的是每行列的总数

常用的命令展示

awk擅长列输出

搜索/etc/passwd有root关键字的所有行

 awk` `'/root/'` `/etc/passwd` `【这种是pattern的使用,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)】

image

搜索/etc/passwd有root关键字的所有行,并显示对应的shell

 awk` `-F: ``'/root/ {print $7}'` `/etc/passwd

image

统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:

 awk` `-F ``':'` `'{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}'` `/etc/passwd

image

使用printf替代print,可以让代码更加简洁,易读

 awk` `-F: ``'{printf ("filename:%10s, linenumber:%3s,column:%3s,content:%3f\n",FILENAME,NR,NF,$0)}'` `/etc/passwd

image

打印/etc/passwd/的第二行信息

 awk` `-F: ``'NR==2{print "filename: "FILENAME, $0}'` `/etc/passwd

image

awk的过滤使用方法

 ls` `-lF | ``awk` `'/^d/'

image 指定特定的分隔符,查询第一列

 awk` `-F ``":"` `'{print $1}'` `/etc/passwd

image 指定特定的分隔符,查询最后一列

 awk` `-F ``":"` `'{print $NF}'` `/etc/passwd

image 指定特定的分隔符,查询倒数第二列

 awk` `-F ``":"` `'{print $NF-1}'` `/etc/passwd

image 获取第12到31行的第一列的信息

 awk` `-F ``":"` `'{if(NR12) print $1}'` `/etc/passwd

image

多分隔符的使用:

 [root@localhost ftl]``# awk -F "[/]" 'NR == 4 {print $0,"\n",$1}' /etc/passwd``这里以/为分隔符,多个分隔符利用[]然后在里面写分隔符即可

image

添加了BEGIN和END

 [root@localhost ftl]``# cat /etc/passwd | awk -F: 'BEGIN{print "name, shell"} {print $1,$NF} END{print "hello world"}'

image

查看最近登录最多的IP信息

 [root@localhost ftl]``# last | awk '{S[$3]++} END{for(a in S ) {print S[a],a}}' |uniq| sort -rh

image

利用正则过滤多个空格

 [root@localhost ~]``# ifconfig |grep eth* | awk -F '[ ]+' '{print $1}'

img

awk编程–变量和赋值

除了awk的内置变量,awk还可以自定义变量, awk中的循环语句同样借鉴于C语言,支持while、do/while、for、break、continue,这些关键字的语义和C语言中的语义完全相同。

统计某个文件夹下的大于100k文件的数量和总和

 ls` `-l|``awk` `'{if($5>100){count++; sum+=$5}} {print "Count:" count,"Sum: " sum}'` `【因为``awk``会轮询统计,所以会显示整个过程】``ls` `-l|``awk` `'{if($5>100){count++; sum+=$5}} END{print "Count:" count,"Sum: " sum}'` `【天界END后只显示最后的结果】
 备注:count是自定义变量。之前的action{}里都是只有一个print,其实print只是一个语句,而action{}可以有多个语句,以;号隔开

image

统计显示/etc/passwd的账户

 awk` `-F: ``'{count++;} END{print count}'` `/etc/passwd`    `cat` `/etc/passwd``|``wc` `-l``awk` `-F ``':'` `'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i 

image

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

以上就是良许教程网为各位朋友分享的Linux系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你!

本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部