10、gawk使用进阶

10、gawk使用进阶3 使用 awk 来统计 netstat 连接状态的个数 root www netstat tan awk tcp gt state NF END for print i state i 3 使用

大家好,欢迎来到IT知识分享网。

条件判断语句

if语句

语法:if(condition) statement [else statement] 
示例
1、判断/etc/passwd文件中的用户UID大于100的用户; [root@node1 ~]# awk -F: '{if($3>=100) print $1,$3}' /etc/passwd 2、使用双分支的语句判断/etc/passwd文件中的管理员和普通用户; [root@node1 ~]# awk -F: '{if($3<1) {printf "Admin User:%s\n",$1} else {printf "Common User:%s\n",$1}}' /etc/passwd 3、判断用户是否可以登录; [root@node1 ~]# awk -F: '{if($NF~"bash#34;){printf "Accept Login User: %s\n",$1} else {printf "Reject Login User: %s\n",$1}}' /etc/passwd 4、打印出字段数大于5的行; [root@node1 ~]# awk '{if(NF>5)print $0}' /etc/fstab 5、使用AWK过滤出df磁盘使用率大于80%的设备; [root@node1 ~]# df -h|awk -F[%] '/^\/dev/{print $1}'|awk '{if($NF>=80) print $1,$NF}' 

while循环

语法:while(condition) statement 条件为真进入循环,条件为假退出循环 
示例
1、查找出/etc/grub2.cfg以空白字符开头后面跟linux16的行,并统计字符数; [root@node1 ~]# awk '/^[[:space:]]*linux16/{i=1;while(i<=NF){print $i,length($i);i++}}' /etc/grub2.cfg 2、查找出/etc/grub2.cfg以空白字符开头后面跟linux16的行,并统计字符数,并且字符长度大于7才予以打印; [root@node1 ~]# awk '/^[[:space:]]*linux16/{i=1;while(i<=NF){if(length($i)>7) {print $i,length($i)};i++}}' /etc/grub2.cfg 

do-while循环

语法:do statement while(condition) statement 不论条件是否为真,先执行一次循环体,而后如果条件为真进入循环,条件为假退出循环; 

for循环

语法:for(expr1;expr2;expr3) statement 
示例
1、查找出/etc/grub2.cfg以空白字符开头后面跟linux16的行,并统计字符数; [root@node1 ~]# awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++){print $i,length($i)}}' /etc/grub2.cfg 
特殊用法
 能够遍历数组中的元素 语法:for (var in array) {for-body} 

switch语句

语法:switch (expression) { case value1 or /Regexp/:statement; case value2 or /Regexp/:statement...; default: statement} 多分支的判断语句; 

break和continue

break[n]:可以退出N层循环 

next

提前结束本行的处理而直接进入下一行 
示例
1、显示用户的ID好为偶数的用户; [root@node1 ~]# awk -F: '{if($3%2!=0) next;print $1,$3}' /etc/passwd 

数组

关联数组:array[index-expression] index-expression (1)可使用任意字符串,字符串要使用双引号; (2)如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值初始化为‘空’; 若要判断数组中是否存在某元素,要使用“index in array”格式进行; 若要遍历数组中的每个元素,要使用for循环; 
示例
1、测试数组; [root@node1 ~]# awk 'BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";print weekdays["mon"]}' 2、遍历数组元素; [root@node1 ~]# awk 'BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";for(i in weekdays) print weekdays[i]}' 3、使用awk来统计netstat连接状态的个数; [root@www ~]# netstat -tan|awk '/^tcp\>/{state[$NF]++}END{for(i in state){print i,state[i]}}' 3、使用数组来统计日志访问日志的IP访问次数频率; [root@www ~]# awk '{IP[$1]++}END{for(i in IP){print i,IP[i]}}' /var/log/nginx_blog_access.log 

函数

数值处理
 range():返回0和1之间的一个随机数; 取随机数 [root@www ~]# awk 'BEGIN{print rand()}' 
字符串处理
length():返回字符串的长度; 
练习
1、统计/etc/fstab每个文件系统出现的次数; [root@www ~]# awk '/^UUID/{fs[$3]++}END{for(i in fs){print i,fs[i]}}' /etc/fstab 2、统计指定每个单词出现的次数; [root@www ~]# awk '{for(i=1;i<=NF;i++){count[$i]++}}END{for(i in count){print i,count[i]}}' /etc/fstab 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/159762.html

(0)
上一篇 2025-01-15 16:05
下一篇 2025-01-15 16:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信