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

[经验分享] Linux文本处理工具AWK使用解析

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-6-24 09:04:14 | 显示全部楼层 |阅读模式
  在linux系统上有三大文本处理工具分别是:grep,sed,awk,这次主要来看看awk。awk  option  ‘pattern'  file
-F    指定分隔符;
-v     申明自定义变量;
查看当前系统上,用户名和用户shell,输出分隔符为~.
# awk -F: 'BEGIN{OFS="~";print "UserName   Shell"}{print $1,$7}END{print "================end============="}' /etc/passwd
wKioL1OnkG2Te8bLAAHoqAr3-7g056.jpg
还可以在中间加入模式(pattern),指定只对以in字符结尾的行做处理。
# awk -F: 'BEGIN{OFS="~";print "UserName   Shell"}/in$/{print $1,$7}END{print "================end============="}' /etc/passwd
wKiom1OnkOzi04CKAAGVk9MVmA4087.jpg
显示当前系统上id号小于等于500的用户。(表达式匹配)
# awk -F: '$3<=500{print $1,$3}' /etc/passwd
wKiom1OnkfTysUq8AADz8_EeYe4797.jpg
显示当前系统上shell是/bin/bash的用户(模式匹配)
# awk -F: 'BEGIN{OFS=":";print "UserName  Shell"}$7~/bash/{print $1,$7}' /etc/passwd
wKioL1Onl2bjz1u4AADhHFbpQSY508.jpg
控制语句:
判断用户ID是否为0,如果是就输出用户名并说明是一个管理员用户,如果不是输出用户名,说明是一个普通用户。
# awk -F: '{if ($3==0) {print $1,"Administrator";} else {print  $1,"Common User"}}' /etc/passwd
wKioL1OnxgKSOvcjAAFwjsNQKlA986.jpg
统计下系统上有多少个id号大于500的用户
# awk -F: -v Sum=0 '{if ($3>=500) Sum++}END{print Sum}' /etc/passwd
wKiom1OnyD6yBqjXAABze-oENBI068.jpg
显示number.txt文件中,所以大于100的数值。
# awk  '{i=1;while (i<=NF) {if ($i>=100) print $i;i++}}' number.txt
wKioL1On2DPxRUTHAACNMVVAN1k595.jpg
do-while    至少执行一次循环体,不管条件满足与否。
# awk -F: '{i=4;do {print $i;i--}while (i>4)}' /etc/passwd
wKioL1On2s3THeYCAABwnCQ0Xxs231.jpg
遍历/etc/passwd  $1-$3数值,只输出字符数大于4的数据。
# awk -F: '{for(i=1;i<=3;i++){if (length($i)>=4){print $i}}}' /etc/passwd
wKioL1On3VizB9Q_AACb890E34E218.jpg
使用for显示number.txt文件中,所以大于100的数值。
# awk '{for (i=1;i<=NF;i++){if ($i>=100) {print $i}}}' number.txt
wKiom1On3qPwg7AiAACC6mKQAmo878.jpg
查看网络连接各个状态的次数
# netstat -tan | awk '/^tcp/{state[$NF]++}END{for ( S in state) print S,state[S]}'
wKioL1On5E_AS9BkAAG3w3BNjSI837.jpg
统计日志每个ip访问了多少次
# awk '{ip[$1]++}END{for ( A  in ip ) print  A,ip[A]}'  access_log
统计当前系统用户,每种shell各有多少个。
# awk -F: '{count[$NF]++}END{for (A in count )print A,count[A]}' /etc/passwd
wKioL1On57PwTWsFAAC6YdjgZnE778.jpg
awk的内置函数
split        将数据按分隔符切片保存至数组里
length     返回字符串的字符个数
查看当前每个IP连接,与连接次数。
# netstat -tan | awk '/:80/{split($5,client,":");IP[client[4]]++}END{for (A in IP) print A,IP[A]}'
wKioL1On9P-w0vu2AAFuwWg7z2Y078.jpg
就是数组和split函数这里难了
OK完成了


运维网声明 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-20982-1-1.html 上篇帖子: PXE网络无人值守装机 下篇帖子: WARNING: at net/sched/sch_generic.c:261 dev_watchdog 错误 e1000e Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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