Shell awk 条件判断
时间:2023-01-06 08:30:00
条件判断概述
输出所有行还是输出部分行?
如何限制只输出部分行的数据内容?
多个条件如何设置?
基本语法
awk [选项] 条件 文件.. ..
条件表达式
正则表达式
数值/字符比较
逻辑比较(& ,||)
正则
/正则表达式/
~匹配, !~不匹配
[root@zabbix-server ~]# awk -F: '/^ro/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
#过滤出第7列bash打印出最后一行
[root@zabbix-server ~]# awk -F: '$7!~/bash$/{print $1,$7}' /etc/passwd
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
字串比较值
==等于,!=不等于
>大于,>=大于或等于
<小于,<=小于或等于
[root@zabbix-server ~]# awk 'NR==2{print}' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
[root@zabbix-server ~]# awk -F: '$7!="/bin/bash"' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@zabbix-server ~]# awk -F: '$3>=1000{print $1}' /etc/passwd
nfsnobody
k8s
逻辑比较测试
&&逻辑与:期望建立多个条件
||逻辑或:只要有条件,立即满足要求
#并
[root@zabbix-server ~]# awk -F: '$3>=0&&$3<2{print $1,$3}' /etc/passwd
root 0
bin 1
#或
[root@zabbix-server ~]# awk -F: '$3==0||$3==7{print $1,$3}' /etc/passwd
root 0
halt 7
运算符
,-,*,/,%
,--, =,-=,*=,/=
#打印当前行号,除2余数等于0
[root@zabbix-server ~]# awk 'NR%2==0{print}' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
halt:x:7:0:halt:/sbin:/sbin/halt
有5个数据可以在200以内被3和13排除
[root@zabbix-server ~]# seq 200 | awk 'BEGIN{i=0} $1%3==0&&$1==0{i } END{print i}'
510
————————————————
版权声明:本文为CSDN博主「wangl2014」遵循原创文章CC 4.0 BY-SA版权协议,请附上原始来源链接和本声明。
原文链接:https://blog.csdn.net/wangl2014/article/details/121884478