awk 实例详解
实例文件:
1 root x 0 0 root /root /bin/bash
2 bin x 1 1 bin /bin /sbin/nologin
3 daemon x 2 2 daemon /sbin /sbin/nologin
4 adm x 3 4 adm /var/adm /sbin/nologin
5 1p x 4 7 1p /var/spool/1pd /sbin/nologin
6 shutdown x 6 0 /sbin /sbin/shutdown
一.awk 命令格式
awk参数 找谁 干啥 文件
awk [ options ] ‘pattern {action}’ file
二.实例演示
打印大于等于第二行的第1列和第3列数据
[root@localhost kang]# awk 'NR>=2{print $1,$3}' test2.txt
bin 1
daemon 2
adm 3
1p 4
shutdown 6
小结awk执行过程
1.awk读入第一行内容
2.判断是否符合模式中的条件(N$>=2)
如果匹配默则执行对应的动作{print $1,$2}
如果不匹配条件,继续读取下一行
3.继续读取下一行
备注:$1(第一行)$0(整行) $NF(最行一列)
三.多分隔符展示获取IP地址
[root@localhost kang]# ifconfig eth2
eth2 Link encap:Ethernet HWaddr 00:50:56:80:6E:7E
inet addr:10.3.151.25 Bcast:10.3.151.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe80:6e7e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2382375149 errors:0 dropped:0 overruns:0 frame:0
TX packets:2388107498 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:173650244747 (161.7 GiB) TX bytes:140636654351 (130.9 GiB)
[root@localhost kang]# ifconfig eth2 | awk -F '[ :]+' 'NR==2{print$4}'
10.3.151.25
左右切割方法,只有三列数据
[root@localhost ~]# ifconfig eth2 | awk -F 'addr:| Bcast+' 'NR==2 {print NF}'
3 #分割成分列
[root@localhost ~]# ifconfig eth2 | awk -F 'addr:| Bcast+' 'NR==2 {print $1}'
inet #第一列数据
[root@localhost ~]# ifconfig eth2 | awk -F 'addr:| Bcast+' 'NR==2 {print $2}'
10.3.151.25 #第二列数据
[root@localhost ~]# ifconfig eth2 | awk -F 'addr:| Bcast+' 'NR==2 {print $3}'
:10.3.151.255 Mask:255.255.255.0 #第三列数据
四.awk使用正则表达式
1.打印以s开头的行
[root@localhost kang]# awk '/^s/ {print $0}' test2.txt
shutdown x 6 0 /sbin /sbin/shutdown
2.打印不以s开头的行
[root@localhost kang]# awk '/^[^s]/ {print $0}' test2.txt
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
1p x 4 7 1p /var/spool/1pd /sbin/nologin
#正则表达式以开头:/正则表达式内容/
3. 打印第5列以r开头的行
[root@localhost kang]# awk '$5~/^r/ {print $0}' test2.txt
root x 0 0 root /root /bin/bash
#/$5~/ 表示第五列匹配的内容是什么
4.打印以bash结尾的行
[root@localhost kang]# awk '/bash$/ {print $0}' test2.txt
root x 0 0 root /root /bin/bash