awk的模式匹配
NR 针对行号的比较,
==
>=
模式,是指定了第二行
awk 'NR==2{print $0}'
关于awk的正则匹配
语法
模式,指定正则
awk '/正则/{print $0}'
awk的模式分为这几种
关于数值的比较
| 关系运算符 | 解释 | 示例 | | ---------- | -------- | ---- | | < | 小于 | x<y | | <= | 小于等于 | x<=y | | == | 等于 | x==y | | != | 不等于 | x!=y | | >= | 大于等于 | x>=y | | > | 大于 | x>y | | | | | | | | |
关于字符串的匹配
| ~ | 匹配正则 | x~/正则/ |
| !~ | 与表达式不匹配 | x!~/正则/ |
awk '/正则表达式/{print $0}'
再来看一下awk的语法,模式
也可以理解为是条件
awk [option] 'pattern[action]' file ...
awk默认是按行处理文本,如果不指定任何模式(条件),awk默认一行行处理
如果指定了模式,只有符合模式的才会被处理
创建测试数据
创建用户
[242-yuchao-class01 root ~]#for i in `seq 10`;do useradd t${i};done
删除用户
for i in `seq 10`;do userdel -rf t${i};done
1.显示root行所有信息
2.仅显示root用户名、家目录、登录解释器
1.结尾是bash的行
awk -v FS=':' '/bash$/{print $1}' /etc/passwd
2.指定最后一个字段的正则匹配
1.uid
2./home
1.是nologin的行
2.非bash的行
1.指定行号
2.正则提取
要求且显示行号
范围模式就是从某一行到某一行,均是符合条件的行。
语法
awk '/regex1/,/regex2/{action}' yuchao.log
处理/etc/passwd
且显示行号
且显示行号
print awk提供的命令之一
语法
awk 'BEGIN{print "你好"}{print $0}'
显示/etc/passwd前五行,且加上打印BEGIN动作,打印"awk正在执行中" 表头
awk ' BEGIN{print "awk正在执行中" } NR<=5 {print $0}' /etc/passwd
语法
awk 'BEGIN{} 模式 {动作}'
BEGIN{} 用于awk执行之前的操作
END{} awk所有行数据处理完毕后,做什么事
语法
awk 'BEGIN{print "你好 "} 模式 {动作} END{print "awk完事了"}'
提取root、mail、nobody三个用户信息
且设置好表头(格式化打印)
可以用column -t命令格式化制表符
提取系统前五个用户的,用户名、uid、gid、家目录、登录解释器、设置为表头
且结束后提示,awk已经处理完毕
root: x: 0: 0: root: /root: /bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
awk -v FS=':' 'BEGIN{print "用户名","uid","gid","家目录","登录解释器" }NR<=5{print $1,$3,$4,$6,$7}END{print "awk以及处理完毕,辛苦大家了,准备干饭"}' /etc/passwd
显示/etc/passwd的用户名、登录解释器、且在结尾显示行数。