工作模式 逐行读取
awk 'BEGIN{print "hello"} {print "ok"} END {print "word"}' /etc/passwd
BEGIN 读取文件之前做的操作
print ok 逐行读取文件 每一行打印一个ok
END 读取文件之后做的操作
1 查
1.1)打印整列信息 -F 是指定分隔符
[root@famous-machine-1 ~]# awk -F: '{print $1}' /etc/passwd
root
bin
1.2)匹配到木一行 打印某一列信息
[root@famous-machine-1 ~]# awk -F: '/^root/{print $1}' /etc/passwd
root
1.3)指定某一行 打印指定列信息
[root@famous-machine-1 ~]# awk -F: 'NR==3{print $1}' /etc/passwd
daemon
1.4)同时打印多个信息 指定分隔符
[root@famous-machine-1 ~]# awk '/guojing/{print $1,$2}' 1.txt
guojing 85
[root@famous-machine-1 ~]# awk '/guojing/{print $1" "$2}' 1.txt
guojing 85
[root@famous-machine-1 ~]# awk '/guojing/{print $1"!"$2}' 1.txt
guojing!85
[root@famous-machine-1 ~]# awk '/guojing/{print $1","$2}' 1.txt
guojing,85
1.5)指定列 匹配条件 PS: 第四列匹配以数字9开头的行 打印第一和第四列
[root@famous-machine-1 ~]# awk '$4~/^9/{print $1,$4}' awk_test.txt
guanyu 90
[root@famous-machine-1 ~]# awk '$4~/8$|9$/{print $1,$4}' awk_test.txt
guojing 78
liubei 79
1.6)打印最后一列的信息
[root@famous-machine-1 ~]# awk '{print $NF}' 1.txt
78
75
[root@famous-machine-1 ~]# awk '{print $(NF-1)}' 1.txt
92
90
awk /内容/ 匹配查找内容
[root@rongbiz002 26]# awk '/^root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
2.改
[root@famous-machine-1 ~]# cat test.txt
df sdf 312:4234:432
[root@famous-machine-1 ~]# awk '{gsub(/:/,"~",$3);print $3}' test.txt
312~4234~432
3.awk 数组
3.1)定义数组
[root@RainGod ~]# awk 'BEGIN{h[1]="rongbiz.com";h[2]="rongbiz.cn";h[3]="rongbiz.net";print h[1]" and "h[2]" and "h[3]}'
rongbiz.com and rongbiz.cn and rongbiz.net
3.2)把ip定义成数组索引 遍历索引 打印次数 及ip
[root@rongbiz002 wwwlogs]# awk '{ip[$1]++}END{for(i in ip) print i,ip[i]}' www.rongbiz.com-access_log |sort -rnk2|head|column -t
222.173.94.214 10019
123.185.2.140 5703
120.55.93.127 5231
101.200.61.138 4022
49.74.23.185 1594
49.74.3.102 1544
4.awk条件判断
[root@RainGod ~]# awk -F: '{if($3==0){i++}else if($3>0&&$3<1000){j++} else {k++}}END{print "管理员:" i "系统用户:" j "管理员:" k}' /etc/passwd
管理员:1系统用户:25管理员:2