1、统计访问次数据前10的ip
[root@guilin tmp]# awk '{sum[$1]++}END{for(ip in sum) print ip, sum[ip]}' access.log |sort -nr -k 2|head |nali
211.95.25.86[上海市 联通] 124271
101.86.47.178[上海市 电信] 15058
123.55.161.148[河南省三门峡市 电信] 11898
47.97.161.244[加拿大] 6232
218.81.11.98[上海市宝山区 电信] 5695
119.48.110.100[吉林省长春市 联通ADSL] 4619
123.126.113.163[北京市 联通ADSL] 2496
182.73.13.118[印度] 1996
144.123.25.235[北美地区] 1952
101.231.248.130[上海市 电信] 1668
2、统计Nginx日志中状态码为200的IP出现的次数
awk '{if($12=="200")sum[$1," "$12]++}END{for(ip_num in sum)print ip_num,sum[ip_num]}' access.log |sort -rnk 2|head
统计Nginx日志中状态码非200的IP出现的次数
awk '{if($12!="200")sum[$1," "$12]++}END{for(ip_num in sum)print ip_num,sum[ip_num]}' access.log |sort -rnk 2|head
统计Nginx日志中状态码出现的次数
awk '{sum[$12]++}END{for(status in sum) print status, sum[status]}' access.log| sort -rnk 2|head
统计Nginx日志中状态码出现的次数大于1000的
awk '{sum[$12]++}END{for(status in sum)if(sum[status]>1000) print status, sum[status]}' access.log| sort -rnk 2
3、统计nginx日志里流量
awk '{sum+=$13} END {print "Sum = ", sum/1024/1024/1024"GB"}' access.log
4、根据访问IP统计UV
awk '{print $1}' access.log|sort | uniq -c |wc -l
5、统计访问URL统计PV
awk '{print $7}' access.log|wc -l
6、查询访问最频繁的URL
awk '{print $7}' access.log|sort | uniq -c |sort -nr|less
7、查询访问最频繁的IP
awk '{print $1}' access.log|sort | uniq -c |sort -nr|less
8、根据时间段统计查看日志
cat access.log| sed -n '/14\/Mar\/2015:21/,/14\/Mar\/2015:22/p'|less
$13是nginx字段bytes_sent 字段,根据自己的日志格式修改
body_bytes_sent 发送给客户端的字节数,不包括响应头的大小
bytes_sent 发送给客户端的字节数
计算最高带宽
awk -F'[: ]' '{a[$5":"$6]+=$14}END{for(i in a){print i,a[i]}}' $ACCESS_LOG|sort|awk '{a+=$2;if(NR%5==0){if(a>b){b=a;c=$1};a=0}}END{print c,b*8/300/1024/1024}'
awk统计命令
数据量较大时慎用cat
1、求和
cat data|awk '{sum+=$1} END {print "Sum = ", sum}'
2、求平均
cat data|awk '{sum+=$1} END {print "Average = ", sum/NR}'
3、求最大值
cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'
4、求最小值(min的初始值设置一个超大数即可)
awk 'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}'