1、awk小工具的使用原理
2、使用方法
(1)命令模式
(2)脚本模式
3、awk内部相关变量
FILENAME | 文件名 |
---|
######NF(列)
[root@server1 bin]# awk -F : '{print NF}' /etc/passwd
1
1
1
7
7
7
[root@server1 bin]# awk -F: '{print $NF}' /etc/passwd //这样我们在不知道有多少分割域的情况下,就可以直接打印出最后一个域的内容
vdjkch8909
45312xhdgshcj424cswad
4534vwajaw4542
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
[root@server1 bin]# awk -F: '{print $(NF-1)}' /etc/passwd //$(NF-1)表示的是最后一列的前一列
vdjkch8909
45312xhdgshcj424cswad
4534vwajaw4542
/root
/bin
/sbin
/var/adm
/var/spool/lpd
/sbin
/sbin
#######NR(行)
[root@server1 bin]# awk -F: 'NR==1,NR==5{print}' /etc/passwd //打印第一行到第五行,注意print默认打印$0
vdjkch8909
45312xhdgshcj424cswad
4534vwajaw4542
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@server1 bin]# awk -F: 'NR>=1 && NR<=5{print}' /etc/passwd //打印第一行到第五行默认
vdjkch8909
45312xhdgshcj424cswad
4534vwajaw4542
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
####关键字
[root@server1 bin]# awk -F: '/root/{print$1,$NF}' /etc/passwd //打印文件中包含root关键字行的第一列和最后一列
root /bin/bash
operator /sbin/nologin
4、awk中的BEGIN和END使用
awk -F: 'BEGIN{print "login_shell\t login_home\n*********"};{print$1,$NF};END{print "******"} ' /etc/passwd
[root@server1 bin]# awk 'BEGIN{FS=":"};{print$1};END{}' /mnt/passwd //相当于下一个
abc
root
bin
daemon
adm
lp
sync
shutdown
[root@server1 bin]# awk -F: '{print$1}' /mnt/passwd
abc
root
bin
daemon
adm
lp
5、awk结合正则表达式使用
第一个:
[root@server1 bin]# awk -F: 'NR==1,/^lp/{print $0}' /mnt/passwd
abc
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
6、AWK中的变量引用不能使用取址符号,直接使用变量,因为取址符号加数字在AWK中为打印指定域的意思。
使用BEGIN时,这一部分被作为开始处理之前。
[root@server1 bin]# awk -v num=3 -F: 'BEGIN{print num}' /mnt/passwd
3
awk -F: 'BEGIN{N=0}{/bash$/ && $6!~/^\/home/ && N++}END{print N}' /etc/passwd ###将能su 切换过来的且家目录不是/home的用户数统计出来
参数详解:
/bash$/ 以bash结尾的行
$6!~/^\/home/ 第六列不是以/home开头的
&& 并且
awk '!/^#|^$/' fstab ##显示除了以#开头的和空白行
/ x | y/ 放置关键字,|表示或,表示匹配关键词x或y。
注意:
单引号内的内容,如果是变量直接使用,如果是字符串,要用双引号引起来。
/ x | y/ = / x/ || /y/