awk
基本的awk执行过程
#passwd文件的第二行的第一列第二列
[root@docker ~]# awk -F ":" 'NR==2{print $1,$2}' /etc/passwd
bin x
awk 参数 '模式{动作}' 文件
awk 参数 '条件(找谁){干啥}' 文件
模式匹配:模式与动作
通过正则表达式作为模式
[root@docker ~]# cat /server/files/reg.txt
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 70271111 :250:60:75
Wu Waiwai 31583789 :250:80:50
Liu Bingbing 32684812 :250:100:175
Wang Xiaoai 174629823 :50:95:135
Zi Gege 198228725 :250:168:200
Li Youjiu 91828736 :175:75:300
Lao Nanhai 91838293 :250:100:175
#显示xiaoyu的姓氏和ID

显示所有以41开头的ID号码的人的全名和ID号码

显示所有ID号码最后一位数是1和5的人全名
awk '$3~/(1|5)/{print $1,$2}' reg.txt
$3~ 表示第三列

显示Xiaoyu的捐款,每个值都以$开头,如$521$555$121
gsub(/目标/,“替换为什么”,第几列)
[root@docker files]# awk '$2~/Xiaoyu/{gsub(/:/,"$","$4");print}' reg.txt
Zhang Xiaoyu 411120151 :155:90:201
[root@docker files]# awk '$2~/Xiaoyu/{gsub(/:/,"$");print}' reg.txt
Zhang Xiaoyu 411120151 $155$90$201
特殊模式BEGIN和END
BEGIN BEGIN里面的内容,会在awk读取文件内容之前运行
测试,计算
END{}*** END{}里面的内容,会在awk读取完文件的最后一行之后运行
用来显示最终结果
先计算,END显示结果
统计/etc/services文件里面有多少空行数量
i=i+1 === i++ 统计
[root@docker files]# awk '/^$/{i=i+1}END{print i}' /etc/services
17
先计算END{显示最终结果}
awk数组-统计与计算
i=i+1 == i++
h[$2]=h[$2]+1 == h[$2]++
[root@docker files]# awk -F "[/.]+" '{print $2}' url.txt
www
www
post
mp3
www
post
[root@docker files]# awk -F "[/.]+" '{h[$2]=h{$2}+1;print h["www"]}' url.txt
awk: cmd. line:1: {h[$2]=h{$2}+1;print h["www"]}
awk: cmd. line:1: ^ syntax error
[root@docker files]# awk -F "[/.]+" '{h[$2]=h[$2]+1;print h["www"]}' url.txt
1
2
2
2
3
3
[root@docker files]# awk -F "[/.]+" '{h[$2]=h[$2]+1}END{print h["www"],h["post"],h["mp3"]}' url.txt
awk -F "[/.]+" '{h[$2]=h[$2]+1}END{for(pol in h) print pol,h[pol]}' url.txt
www 3
mp3 1
post 2
secure系统日志分析练习
谁在破解你的密码(Faild password 每个ip地址出现次数)
分析系统的每个用户破解的次数
总结:
1.awk数据进行统计
i=i+1 ==== i++ 统计次数
i=i+$n i+=$n
2.执行过程
3.awk通过正则作为模式
4BEFIN和END特殊模式
3 2 1

浙公网安备 33010602011771号