Shell awk 条件判断

条件判断概述

  • 输出所有行还是输出部分行?
  • 如何限制仅输出部分行的数据内容?
  • 如何设置多个条件?

基本语法

  • awk [选项] '条件'{指令} 文件.. ..

条件表达式

  1. 正则表达式
  2. 数值/字符比较
  3. 逻辑比较(& ,||)
正则
/正则表达式/
~匹配,    !~不匹配
[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
#200以内能被3和13整除的数据有5个
[root@zabbix-server ~]# seq 200 | awk 'BEGIN{i=0} $1%3==0&&$1%13==0{i++} END{print i}'
5

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值