其他
正则表达式(8)-三剑客之awk(3)
每周二、四、六定期更新!
awk操作符
算术运算:
这部分和前面介绍shell的算术运算是一样的,我们不做详细介绍。
x+y 加法
x-y 减法
x*y 乘法
x/y 除法
x^y 异或
x%y 取余
= -= += *= /= %= ^= ++ --
看个例子吧:
[root@studyclub script]# awk 'BEGIN{i=0; print i++,i}'
0 1
[root@studyclub script]# awk 'BEGIN{i=0; print ++i,i}'
1 1
== 等于
!= 不等于
> 大于
>= 大于等于
< 小于
<= 小于等于
~ 左边是否和右边匹配,可以相等,左边包含右边的字符串。在相等或者左边包含右边的情况下,判断结果为真
!~ 不匹配
# 实例1:
[root@studyclub script]# awk -F: '$0 ~ /root/{print $1}' /etc/passwd
root
operator
# 实例2:
# 现在我们把之前查看有哪些客户端连接到了本机的例子重新写一个更简单的(省略掉grep):
[root@studyclub script]# ss -nt | awk -F "[[:space:]]+|:" '$0 ~ /^ESTAB/{print $(NF-2)}'
10.0.0.1
# 实例3:
# 通过awk查看uid为0的账户信息
[root@studyclub script]# awk -F: '$3==0' /etc/passwd
root:x:0:0:root:/root:/bin/bash
# 实例4:我们之前在讲grep和sed的时候都提到了取IP地址的操作,awk也可以:
[root@studyclub script]# ifconfig ens33 | awk 'NR==2{print $2}' # 记住哦,awk默认是以空格作为分隔符
10.0.0.136
# 如果上面的不好理解,我们也可以指定分隔符
[root@studyclub script]# ifconfig ens33 | awk -F"[[:space:]]+" 'NR==2{print $3}' # 行首有多个连续的空格,所以ip地址就变成了第三列了
10.0.0.136
逻辑运算
&& 与
|| 或
! 非
# 实例1:查看UID小于1000的用户名称(即查看系统账户的用户名称)
[root@studyclub jason]# awk -F: '$3>=0 && $3<1000 {print $1}' /etc/passwd
root
......
rpc
rpcuser
chrony
# 实例2:查看管理员和普通用户有哪些
[root@studyclub jason]# awk -F: '$3==0 || $3>=1000 {print $1}' /etc/passwd
root
jason
james
eric
simon
......
# 实例3:练习一下取反。注意:对于取反的判断条件要用小括号括起来
[root@studyclub jason]# awk -F: '!($3<1000) {print $1}' /etc/passwd
jason
james
eric
simon
......
条件表达式(三目表达式):
selector?if-true-expression;if-false-expression
实例演示:
[root@studyclub jason]# awk 'BEGIN{a="jason";print a=="james"?"yes":"no"}'
no
[root@studyclub jason]# awk 'BEGIN{a="b";print a=="b"?"yes":"no"}'
yes
# 把用户按照UID大小分类标记
[root@studyclub jason]# awk -F: '$3>=1000?type="common_user":type="sysuser"{printf "%16s %s\n",$1,type}' /etc/passwd
root sysuser
......
postfix sysuser
jason common_user
《Linux基础及进阶》:
看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
微信号|bjdream-1
Cloud研习社 ·