其他
正则表达式(9)-三剑客之awk(4)
每周二、四、六定期更新!
模式pattern(即awk基本用法里提到的匹配规则)
[root@studyclub jason]# awk -F: '{print $1}' /etc/passwd
# 匹配以root开头的行,并把这一行按照冒号作为分隔符对行进行分割以后,打印出第一个字段
[root@studyclub jason]# awk -F: '/^root/{print $1}' /etc/passwd
root
# 和上例相反,打印出不是以root开头的行的第一个字段
[root@studyclub jason]# awk -F: '!/^root/{print $1}' /etc/passwd
root
#
[root@studyclub jason]# awk -F: '$3>=0 && $3<1000 {print $1}' /etc/passwd
# 取出/etc/passwd的第三行。即NR为3的行。
[root@studyclub jason]# awk 'NR==3{print $0}' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
# 找出容量大于500000的所有盘的大小
[root@studyclub jason]# df | awk '!/^Filesystem/ && $2>500000 {print $2}'
18765824
# 验证一下真假到底是什么:
[root@studyclub jason]# awk '" "' /etc/hosts # 空格不算空
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@studyclub jason]# awk '""' /etc/hosts # 双引号里没有东西才算空
[root@studyclub jason]# awk '0' /etc/hosts # 0为假
[root@studyclub jason]# awk '1' /etc/hosts # 非0才为真
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@studyclub jason]# awk '"0"' /etc/hosts # 此时0是字符串了,所以不是空
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@studyclub jason]# awk '++i{print i, $0}' /etc/hosts
1 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
2 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@studyclub jason]# awk 'i++{print i, $0}' /etc/hosts
2 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# 打印行:从root开头的行到daemon开头的行全部打印
[root@studyclub jason]# awk '/^root/,/^daemon/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
# 打印前三行
[root@studyclub jason]# awk 'NR>=1 && NR<=3' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@studyclub jason]# awk -F: 'BEGIN{printf "%-16s | %s\n","username","UID";print "-----------------|------"}{printf "%-16s | %d\n",$1,$3}END{printf "======================\n"}' /etc/passwd
username | UID
-----------------|------
root | 0
......
chrony | 997
sun | 1501
======================
条件判断if-else
语法:
if (表达式 ) {
语句;语句;...
}
if (表达式 ) {
语句;语句;...
} else {
语句;语句;...
}
# 只有一个if判断
[root@studyclub jason]# awk -F: '{if($3>=1000) {print $1,"common_user"}}' /etc/passwd
jason common_user
......
sun common_user
# 加上else判断
[root@studyclub jason]# awk -F: '{if($3>=1000) {print $1,"common_user"}else {print $1, "sysuser"}}' /etc/passwd
root sysuser
......
sun common_user
新手应知:
《Linux基础及进阶》:
063 - 正则表达式(4)-三剑客之grep 064 - 正则表达式(5)-三剑客之sed 065 - 正则表达式(6)-三剑客之awk(1) 066 - 正则表达式(7)-三剑客之awk(2) 067 - 正则表达式(8)-三剑客之awk(3)看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
微信号|bjdream-1
Cloud研习社 ·