0
点赞
收藏
分享

微信扫一扫

awk之nginx实践练习题

一 awk之nginx实践案例:

 

nginx日志格式内容如下:
106.12.223.235 - - [18/Dec/2020:05:19:55 +0800] "GET /examples/globalresources.html HTTP/1.1" 404 784 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"

 

1统计时间段内访问ip次数最多的记录

awk '$4>="[17/Dec/2020:05:19:55" &&$4<="[18/Dec/2020:05:19:55"{a[$1]++}END{for (i in a)print i,a[i]}' /usr/nginx/logs/access.log

awk之nginx实践练习题_nginx

2统计访问ip次数:

awk ‘{a[$1]++}END{for (i in a)print i,a[i]}’ /usr/nginx/logs/access.log

awk之nginx实践练习题_数组_02

3统计访问ip次数大于100的记录:

awk '{a[$1]++}END{for (i in a){if (a[i]>100)print i,a[i]}}' /usr/nginx/logs/access.log

 

awk之nginx实践练习题_nginx_03

4统计ip访问前十的记录:

awk '{a[$1]++}END{for (i in a)print i,a[i]|"sort -k2 -nr|head -10"}' /usr/nginx/logs/access.log

 

awk之nginx实践练习题_for循环_04

5统计上一分钟ip的访问量

[root@tyjs09 ~]# date=$(date -d '-1 minute' +%Y/%m/%d:%H:%M)

[root@tyjs09 ~]# echo $date

2020/12/24:14:03

[root@tyjs09 ~]# awk -vdate=$date '$4~date{c++}END{print c}' /usr/nginx/logs/access.log

 

awk之nginx实践练习题_数组_05

6统计访问最多的10个页面:

awk '{a[$7]++}END{for (i in a)print i,a[i]|"sort -k1 -nr|head -n10"}'at /usr/nginx/logs/access.log

 

awk之nginx实践练习题_for循环_06

7统计每个ip访问状态码的数量:

awk '{a[$1""$9]++}END{for (i in a)print i,a[i]}' /usr/nginx/logs/access.log

awk之nginx实践练习题_三剑客_07

 

 

8统计ip访问404状态次数:

awk '{if($9~/404/)a[$1""$9]++}END{for (i in a)print i,a[i]}' /usr/nginx/logs/access.log

 

awk之nginx实践练习题_nginx_08

二 两个文件差异对比

1找出2个文件中相同的内容

awk 'FNR==NR{a[$0];next}{if ($0 in a)print $0}' a b

 

awk之nginx实践练习题_三剑客_09

2找出2个文件中不同的内容

awk 'NR==FNR{a[$0];next}!($0 in a)' a b

awk之nginx实践练习题_for循环_10

3合并2个文件:

awk 'NR==FNR{a[$1]=$0;next}{print (a[$1]" "$2)}' a b

awk之nginx实践练习题_nginx_11

4将文件内相同ip的服务名合并

awk 'BEGIN{FS=":"}{a[$1]=a[$1]$2}END{for(v in a)print v,a[v]}' a

以后就记住,凡事将相同key但值不同的数据追加合并,就用for循环即可实现追加

awk之nginx实践练习题_数组_12

 

5 将列合并成一行

awk '{a[i]=a[i]$i" "}END{for(v in a)print a[v]}' a

awk之nginx实践练习题_数组_13

解释:

三行三列9个字符,将9个字符定义成数组a[i],那么for循环这个数组就可以循环9次

数组里面的内容就是:a[1]=1,a[2]=2,。。。。。。

循环时,当v=1时print a[v]=1,当v=2时print a[v]=2

a[i]=a[i]$i” ”是我们定义的变量

 

6将列合并成行

awk '{for(i=1;i<=3;i++)a[i]=a[i]$i" "}END{for (v in a)print a[v]}' a

 

awk之nginx实践练习题_nginx_14

解释:

如果要指定每列的显示个数,对一对for循环的次数做限制,符合条件后即换行接着循环



举报

相关推荐

0 条评论