awk一些常用基本方法详解(一)

  • 2019-09-02
  • 0
  • 0

AWK:

awk 参数 ‘模式{动作}’ 文件
awk 参数 ‘条件(找谁){干啥}’ 文件
常用: -F 指定分隔符 取列,默认空格为分隔符

awk正则表达式

符号 表达含义
* 与前面的正则表达式的零个或多个出现匹配
. 匹配任何单个字符
\|转义随后的特殊字符
+ 匹配前面的正则表达式的一次或多次出现
^ 作为正则表达式的第一个字符,表示匹配行的开始,以什么开头
$ 作为正则表达式的最后一个字符,表示匹配行的结尾
? 匹配前面的正则表达式的零次或一次出现
{n,m} 匹配它前面某个范围内单个字符出现的次数,{n}将匹配n次出现,{n,}至少匹配n次出现,{n,m}匹配n和m之间的任意次出现

1.awk取行,匹配文件内容:

- awk -F":" '{print $1 " " $3}'  /etc/passwd    $1与$3之间手动添加空格分隔
- awk '/ljc/'    file                             显示文件file中包含ljc的匹配行。
- awk '!/ljc/'    file                        显示文件file中不包含ljc的匹配行。
- awk '/起始内容/,/终止内容/'   file              取包含内容的区间行区间匹配
- awk '/halt|sync/' file                      匹配halt或者sync的行
- awk 'NR>=5 && NR<=10' file                    取5到10行,逻辑与
- awk -F: '$1~/mail/ || $3>1 {print }' /ljc        取$1或者mail或者$3>1的行,逻辑或

2.awk中的替换:

替换但不修改文件内容:
gsub(/目标/,"替换为什么",第几列)
gsub(/目标/,"替换为什么") == gsub(/目标/,"替换为什么",$0)
例:
[root@ljc ~]# awk 'gsub(/halt/,"tihuang")' liangjc.txt 

3.BEGIN{} 模块计算

END{} 模块awk读取文件之后执行,先计算,最后END{}显示结果

数组运算一些常用例子

例1:分析access.log中每个ip地址出现的次数

[root@ljc~]# awk  '{h[$1]++}END{for(p in h) print p""h[p]}' access.log|sort -rnk2|head|column -t
58.220.223.62   12
112.64.171.98   14
114.83.184.139  122

例2:分析access.log中每个ip地址使用的流量总数

i=i+$10  ===   i+=$10
[root@ljc~]# awk  '{h[$1]+=$10}END{for(p in h) print p,h[p]/1024^2"MB"}' access.log |sort -rnk2|head |column -t
114.83.184.139   29.91MB
117.136.66.10    21.3922MB
116.216.30.47    20.4716MB

例3:分析secure文件中每个用户被破解的次数:

破解root用户的次数
[root@ljc~]# awk '/Failedpassword/{if($(NF-5)=="root")i++}END{print i}' secure-20181219
3283

例4:分析secure文件中每个ip地址破解你的次数

[root@ljc ~]# awk '/Failedpassword/{h[$(NF-3)]++}END{for(p in h) print p" "h[p]}' secure-20181219|sort-rnk2|column -t|head
218.65.30.25     68652
218.65.30.53     34326

例5:分析secure文件中每个用户被每个ip破解的次数

[root@ljc ~]# awk '/Failedpassword/{h[$(NF-5)" "$(NF-3)]++}END{for(p in h) print p""h[p]}' secure-20181219|sort -rnk3|column -t|head -20
root           218.65.30.25     68652
root          218.65.30.53     34326
root           218.87.109.154   21201

例6:分析access.log文件中每个ip地址的访问次数与每个ip地址使用的流量总数:

1)ip地址使用的流量总数

[root@ljc ~]#  awk '{h[$1]++;h[$1]+=$10}END{for(p in h)print p" "h[p]/1024^2"MB"}' access.log|column -t|sort-rnk2|head
114.83.184.139   29.9119MB
117.136.66.10    21.3937MB

2)ip地址的访问次数

[root@ljc ~]#  awk '{h[$1]""h[$1]++;s[$1]+=$10}END{for(t in h) print t" "h[t]}' access.log|column-t|sort -rnk2|head
58.220.223.62    12049
112.64.171.98    10856

3)每个ip地址的访问次数与每个ip地址使用的流量总数

[root@ljc ~]# awk '{h[$1]""h[$1]++;s[$1]+=$10}END{for(t in h) print t" "h[t]""s[t]/1024^2"MB"}' access.log|column -t|sort -rnk2|head
58.220.223.62    12049 12.0192MB
112.64.171.98    10856 14.5483MB

评论

还没有任何评论,你来说两句吧

提供支持 - 友情链接 - 衫小寨