三剑客之awk

工作模式 逐行读取
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
原文地址:https://www.cnblogs.com/yangtao416/p/14455230.html