awk 经过两天的训练,以及大概门路知道了。
今天还是边练习边总结
示例:
例子1、判断
基本语法:awk “{if(判断) 操作}”
最经典的是从ifconfig截取出ip地址,除了lo地址
先来分析一波 ifconfig的结果:
[root@Nick tmp]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.120.202 netmask 255.255.255.0 broadcast 192.168.120.255
inet6 fe80::50e7:a4f2:a202:b574 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:70:1a:db txqueuelen 1000 (Ethernet)
RX packets 20966 bytes 1753888 (1.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12447 bytes 1520008 (1.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 360 bytes 30772 (30.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 360 bytes 30772 (30.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
对于inet来说,他是第一列, ip地址是第二列,回环地址是127.0.0.1,我们可以用 $2!~ /127.0.0.1/来筛选
所以具体为操作是这样
[root@Nick tmp]# ifconfig | awk '{if($1=="inet"&& $2 !~ /127/) print$2 }'
192.168.120.202
总结:awk里面也可以添加判断语句,并且判断可以做 ==/!= 和 ~/!~两个类型判断
例子2、-F选项
-F选项
-F是设定列分隔符
筛选出,使用bash的用户名和uid
[root@Nick tmp]# awk -F: '{if($NF ~ /bash/) print $1,$3}' passwd
root 0
user2 1001
nick 1002
root1 1003
user1 1004
natasha 1005
harry 1006
ga 1008
gg 1009
ttt2 1010
mysql 996
passwd 里面的内容,都是以: 分割的列,我们需要用到-F: , 不用-F的时候默认用空格分割