设为首页 收藏本站
查看: 280|回复: 0

[经验分享] awk进阶篇

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-11-25 09:22:46 | 显示全部楼层 |阅读模式
awk支持正则表达式
我们再来看几个字符串匹配的示例:
匹配以sh结尾的行,显示第一和第七段数据
1
2
3
[iyunv@www ~]# awk -F: '$7~/sh$/{print $1,$7}' OFS="\t" /etc/passwd
root        /bin/bash
mysql        /bin/bash



~表示匹配模式开始,$7~/模式/就是指定第七列匹配模式
1
2
3
[iyunv@www ~]# awk -F: '$7~/sh$/{print $1,$7}' OFS="\t" /etc/passwd
root/bin/bash
mysql/bin/bash



!~表示取反
1
2
3
4
5
[iyunv@www ~]# awk -F: '$7!~/sh$/{print $1,$7}' OFS="\t" /etc/passwd
bin        /sbin/nologin
daemon        /sbin/nologin
adm        /sbin/nologin
lp        /sbin/nologin



控制语句
    if-else
    语法:if(condition){then-body}else{[else-body]}
区分Admin和Common User
1
2
3
4
5
6
[iyunv@www ~]# awk -F: '{if ($1=="root")print $1,"Admin";else print $1,"Common User"}' /etc/passwd
root Admin
bin Common User
daemon Common User
adm Common User
lp Common User



显示前5行中账户字符数大于等于4的账户
1
2
3
[iyunv@www ~]# awk -F: 'NR<=5{if(length($1)>=4){print $1}}' /etc/passwd
root
daemon



函数length([string])的功能是返回string字符串字符的个数。
length($1)指变量$1记录的数据的字符个数

    for循环可以用来遍历数组元素:
1
2
3
4
5
6
[iyunv@www ~]# awk -F: '{BASH[$NF]++}END{for(A in BASH)print A,BASH[A]}' /etc/passwd
/sbin/shutdown 1
/bin/bash 2
/sbin/nologin 27
/sbin/halt 1
/bin/sync 1



NF读取本行字段数,$NF读取本行最后一个字段数据,BASH[$NF]把$NF读取的数据保存为BASH数组的一个元素,读取到相同元素时数组元素值递增,for循环遍历各数组元素,最后输出元素和元素值
由上例所示:当读到第一个元素/bin/bash,则BASH[/bin/bash]=1,继续往下读,下一个是/sbin/nologin,
BASH[/sbin/nologin]=1,再往后读如果是/bin/bash,BASH[/bin/bash]则加1;如果是/sbin/nologin,BASH[/sbin/nologin]加1;如果有新元素则增加新元素。

awk的内置函数
split(string,array[,fieldsep[,seps]])
功能:将string表示的字符串以fieldsep为分隔符进行分隔,并将分隔后的结果保存至array为名的数组中;数组下标为从1开始的序列
查看存储超过20%的设备
1
2
3
[iyunv@www ~]# df -lh | awk '!/^File/{split($5,percent,"%");if(percent[1]>=20)print $1,$5}'
/dev/sda2 22%
/dev/sda1 28%



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-33667-1-1.html 上篇帖子: linux文件查找命令使用总结 下篇帖子: 解决linux下外接无线网卡报错问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表