三剑客之awk

三剑客之awk

awk命令的执行过程

#满足
awk从文件中读取一行内容到内存中--》判断是否满足条件--满足---执行对应的命令---输出到屏幕
#不满足
awk从文件中读取一行内容到内存中--》判断是否满足条件--不满足---继续读取文件里的内容直到文件最后

awk命令的语法

awk  参数  '模式{动作}'  文件
awk  参数  '条件(找谁){干啥}'  文件
~:表示包含的意思
gsub:表示替换,语法(gsbu(/目标/,"替换成什么",第几列))

akw命令之查询

#示例文件
[root@web02 files]# cat reg.txt 
Zhang Dandan    41117397   :250:100:175
Zhang Xiaoyu    390320151  :155:90:201
Meng  Feixue    80042789   :250:60:50
Wu    Waiwai    70271111   :250:80:75
Liu   Bingbing  41117483   :250:100:175
Wang  Xiaoai    3515064655 :50:95:135
Zi    Gege      1986787350 :250:168:200
Li    Youjiu    918391635  :175:75:300
Lao   Nanhai    918391635  :250:100:175
#显示Xiaoyu的姓氏和ID号码
[root@web02 files]# awk '/Xiaoyu/{print $1,$2}' reg.txt 
Zhang Xiaoyu
#显示所有以41开头的ID号码的人的全名和ID号码
[root@web02 files]# awk '$3~/^41/{print $1,$2,$3}' reg.txt 
Zhang Dandan 41117397
Liu Bingbing 41117483
#显示所有ID号码最后一位数字是1或5的人的全名
[root@web02 files]# awk '$3~/[15]$/{print $1,$2}' reg.txt 
Zhang Xiaoyu
Wu Waiwai
Wang Xiaoai
Li Youjiu
Lao Nanhai
[root@web02 files]# 

awk命令之替换

[root@web02 files]# cat reg.txt 
Zhang Dandan    41117397   :250:100:175
Zhang Xiaoyu    390320151  :155:90:201
Meng  Feixue    80042789   :250:60:50
Wu    Waiwai    70271111   :250:80:75
Liu   Bingbing  41117483   :250:100:175
Wang  Xiaoai    3515064655 :50:95:135
Zi    Gege      1986787350 :250:168:200
Li    Youjiu    918391635  :175:75:300
Lao   Nanhai    918391635  :250:100:175
#显示Xiaoyu的捐款.每个值时都有以$开头.如$520$200$135
[root@web02 files]# awk 'gsub(/:/,"$",$4)' reg.txt 
Zhang Dandan 41117397 $250$100$175
Zhang Xiaoyu 390320151 $155$90$201
Meng Feixue 80042789 $250$60$50
Wu Waiwai 70271111 $250$80$75
Liu Bingbing 41117483 $250$100$175
Wang Xiaoai 3515064655 $50$95$135
Zi Gege 1986787350 $250$168$200
Li Youjiu 918391635 $175$75$300
Lao Nanhai 918391635 $250$100$175
[root@web02 files]# 

awk命令之BEGIN模式:主要用来测试与计算

[root@web02 ~]# awk 'BEGIN{print 100 * 2.2}'
220

awk命令之END模式:用来计算显示最终统计结果

[root@web02 ~]# #统计/etc/services文件里面的空行数量
[root@web02 ~]# awk '/^$/{i++}END{print i}' /etc/services 
16

awk命令之数组:用来统计与计算

处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题)
[root@web02 ~]# cat url.txt 
http://www.etiantian.org/index.html
http://www.etiantian.org/1.html
http://post.etiantian.org/index.html
http://mp3.etiantian.org/index.html
http://www.etiantian.org/3.html
http://post.etiantian.org/2.html
#方法一:使用单个添加
[root@web02 ~]# awk -F '[/.]+' '{h[$2]++}END{print h["www"],h["mp3"]}' url.txt 
3 1
#方法二:使用for循环
[root@web02 ~]# awk -F '[/.]+' '{h[$2]++}END{for(pol in h)print pol "\t" h[pol]}' url.txt 
www    3
mp3    1
post    2
[root@web02 ~]# 

secure系统日志分析练习

谁在破解你的密码(Failed password 每个ip地址出现的次数)
[root@web02 files]# awk '/Failed password/{h[$(NF-3)]++}END{for(pol in h)print pol"\t" h[pol]}' secure-20161219 
218.65.30.126    17163
218.65.30.61    17163
125.16.71.175    4
169.46.38.74    9
183.136.238.78    30
218.2.0.16    10
91.223.133.33    2
222.186.50.206    3289
51.254.143.19    9
113.207.7.3    316
111.73.46.156    3206
123.31.34.141    39
187.115.73.70    9
182.100.67.119    17163
218.87.109.150    17163
218.87.109.151    17163
..........
分析系统的每个用户被破解的次数
[root@web02 files]# awk '/Failed/{h[$(NF-5)]++}END{for(pol in h )print pol"\t"h[pol]}' secure-20161219 |head
odoo    3
2735    1
oleta    3
ubuntu1    1
imcmon    3
ubuntu2    1
ubuntu3    1
ubuntu    7
nagiosuser    3
erp    3
[root@web02 files]# 
posted @ 2019-01-29 22:41  游走在边缘的人  阅读(254)  评论(0编辑  收藏  举报