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

 

posted @ 2021-03-29 22:11  弓长虎三  阅读(184)  评论(0)    收藏  举报