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