shell脚本之AWK(行处理器)

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值