shell統(tǒng)計pv和uv、獨立ip的方法
每天分析日志的哥們實在傷不起,經(jīng)常需要給出PV,UV,獨立IP等一些統(tǒng)計值,使用C/C++,java都可以寫,過程是這樣的,先讀取文件,逐行掃描,把能標(biāo)記的值放入數(shù)據(jù)結(jié)構(gòu)中,排重得出最終結(jié)果,其實Linux本身有很強(qiáng)大的文本處理功能,完全可以用shell + 一些文本小工具得出結(jié)果。
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很簡單,大致就是統(tǒng)計某個URL的訪問次數(shù),例如統(tǒng)計/index.html的訪問次數(shù)
grep "/index.html" /var/log/nginx/access.log –c
UV呢,我們根據(jù)用戶標(biāo)識(第四列) ,首先需要字符串截取,使用cut命令,以空格符號分割,-d “ ”, 再取第四列-f 4,然后這里需要排重,需要使用uniq工具,uniq速度很快,但是基于就近排重,前一個后一個一樣會排重,之間間隔了不一樣的,就不行了,這就必須使用sort工具來對標(biāo)識符進(jìn)行排序,排序后再使用uniq工具就可以達(dá)到目的,之間我們用管道符號鏈接, 最后再用 wc –l 輸出統(tǒng)計數(shù)
比如我們統(tǒng)計訪問了/index.html這也頁面的uv:
grep "/index.html" /var/log/nginx/access.log | cut –d “ ” –f 4| sort | uniq | wc –l
獨立IP:
假設(shè)我們要統(tǒng)計整站的獨立IP,那么我們不需要使用 grep來匹配具體頁面,只需要使用cat輸出即可:
cat /var/log/nginx/access.log | cut –d “ ” –f 1 | sort| uniq | wc -l
都木有使用強(qiáng)大的awk,就完成了基本的統(tǒng)計需求:)
相關(guān)文章
linux echo命令以及l(fā)inux echo命令提示權(quán)限不夠的解決辦法
linux的echo命令, 在shell編程中極為常用, 在終端下打印變量value的時候也是常常用到的, 因此有必要了解下echo的用法。下面通過本文給大家介紹linux echo命令以及l(fā)inux echo命令提示權(quán)限不夠的解決辦法,感興趣的朋友一起看看吧2017-09-09
Shell腳本中實現(xiàn)切換用戶并執(zhí)行命令操作
這篇文章主要介紹了Shell腳本中實現(xiàn)切換用戶并執(zhí)行命令操作,看了示例代碼就秒懂了,原來如此簡單,需要的朋友可以參考下2014-12-12
淺談:linux cron 計劃任務(wù)常用符號小結(jié)
本文給大家介紹linux cron計劃任務(wù)常用符號小結(jié),感興趣的朋友跟著小編一起學(xué)習(xí)吧2015-10-10

