大家好,欢迎来到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