一、awk的累加统计

方法一:

# awk '{IP[$1]++}END{for( i in IP ) print i,IP[i]}' access.log |awk '{sum=sum + $2}END{print sum}'

============================


方法二:

# awk '{print $1}' access_20160414.log |sort|uniq -c |sort -rn|awk '{sum+=$1}END{print sum}'


统计脚本:

============================

for i in `ls /opt/logs/nginx/nginx2016/04`

do

   Sum=$(awk '{print $1}' $i |sort|uniq -c |sort -rn|awk '{sum+=$1}END{print sum}')

   echo "$i  sum =  $Sum"  >> /opt/logs/PV_SUM.txt


done


最终PV的统计脚本:

============================

Log=$(find /opt/logs/nginx/nginx2016 -mtime -1 -type f -name "*.log")

Sum=$(awk '{print $1}' $Log |sort|uniq -c |sort -rn|awk '{sum+=$1}END{print sum}')

Name=$(basename $Log)

echo "$Name  sum =  $Sum"  >> /opt/logs/PV_SUM.txt


最终的独立IP的统计脚本:

# cat /usr/local/bin/UV_SUM.sh

#/bin/bash

Date=$(date +%F-%H:%M:%S)

Log=$(find /opt/logs/nginx_rc/nginx_rc2016  -type f -name "*.log" |xargs ls -ltr |tail -1 |awk '{print $NF}')

Sum=$(awk '{print $1}' $Log |sort|uniq |wc -l)

Name=$(basename $Log)

echo "${Date} : ${Name}  sum =  ${Sum}"  >> /opt/logs/UV_SUM.txt




以下参考网上:http://www.jb51.net/article/49316.htm

Nngix输出的access log文件如下:

192.168.1.166 - - 119272312 [05/Nov/2011:16:06:59 +0800] "GET /index.html HTTP/1.1" 200 370 "http://192.168.1.201/" "Chrome/15.0.874.106" "-"  

192.168.1.166 - - 119272312 [05/Nov/2011:16:06:59 +0800] "GET /poweredby.png HTTP/1.1" 200 3034 "http://192.168.1.201/" "Chrome/15.0.874.106" "-" 
192.168.1.177 - - 1007071650 [05/Nov/2011:16:06:59 +0800] "GET /favicon.ico HTTP/1.1" 404 3650 "-" "Chrome/15.0.874.106" "-" 
192.168.1.178 - - 58565468 [05/Nov/2011:16:17:40 +0800] "GET / HTTP/1.1" 200 3700 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" "-" 
192.168.1.166 - - 119272312 [05/Nov/2011:16:17:40 +0800] "GET /nginx-logo.png HTTP/1.1" 200 370 "http://192.168.1.201/" "Chrome/15.0.874.106" "-" 
 


PV很简单,大致就是统计某个URL的访问次数,例如统计/index.html的访问次数


grep "/index.html" /var/log/nginx/access.log –c 


UV呢,我们根据用户标识(第四列) ,首先需要字符串截取,使用cut命令,以空格符号分割,-d “ ”, 再取第四列-f 4,然后这里需要排重,需要使用uniq工具,uniq速度很快,但是基于就近排重,前一个后一个一样会排重,之间间隔了不一样的,就不行了,这就必须使用sort工具来对标识符进行排序,排序后再使用uniq工具就可以达到目的,之间我们用管道符号链接, 最后再用 wc –l 输出统计数

比如我们统计访问了/index.html这也页面的uv:


grep "/index.html" /var/log/nginx/access.log | cut –d “ ” –f 4| sort | uniq | wc –l 



独立IP:


假设我们要统计整站的独立IP,那么我们不需要使用 grep来匹配具体页面,只需要使用cat输出即可:

cat /var/log/nginx/access.log | cut –d “ ” –f 1 | sort| uniq | wc -l  



把cookie记录到访问日志里,供数据挖掘部门统计用户行为。 nginx 配置文件添加如下,这是虚拟主机的配置

server{    # 在server块添加以下代码    # 设置默认值 set $uid "-";    # 存在值则赋值 if ( $http_cookie ~* "at_uvid=(\S+)(;.*|$)"){ set $uid $1; }    # 最后一段数据是该cookie值 log_format  uid_log  '$remote_addr - $remote_user [$time_local] "$request" '  '$status $body_bytes_sent "$http_referer" '  '"$http_user_agent" "$http_x_forwarded_for" "$uid"';   access_log  /var/log/nginx/gretheer.com.log  uid_log;    #到此结束}