1. 程式人生 > >shell:統計web伺服器每天客戶訪問量及每個時段的訪問量

shell:統計web伺服器每天客戶訪問量及每個時段的訪問量

統計web伺服器每天客戶訪問量及每個時段的訪問量

前提:在這之前我每天到公司習慣性的統計一下昨天的總訪問量及每個時段的訪問量,今天突然想起能不能指令碼的方式實現我想要的功能呢,經過一上午的試驗,終於測試成功,寫了3種不同的方法,最後一種方法最簡單

第一種方法(這種方法不靈活,太機械了)

read -p "請輸入要查詢的日誌檔案:" logFile

if [ -e $logFile ];then

        all=`cat $logFile | cut -d' ' -f1 | sort -n | uniq -c | sort -n | wc -l`

        echo "今天訪問問的總人數為:$all"

        on0=`cat $logFile | grep "16/Jan/2016:00" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天0點訪問的人數有:$on0"

        on1=`cat $logFile | grep "16/Jan/2016:01" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天1點訪問的人數有:$on1"

        on2=`cat $logFile | grep "16/Jan/2016:02" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天2點訪問的人數有:$on2"

        on3=`cat $logFile | grep "16/Jan/2016:03" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天3點訪問的人數有:$on3"

        on4=`cat $logFile | grep "16/Jan/2016:04" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天4點訪問的人數有:$on4"

        on5=`cat $logFile | grep "16/Jan/2016:05" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天5點訪問的人數有:$on5"

        on6=`cat $logFile | grep "16/Jan/2016:06" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天6點訪問的人數有:$on6"

        on7=`cat $logFile | grep "16/Jan/2016:07" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天7點訪問的人數有:$on7"

        on8=`cat $logFile | grep "16/Jan/2016:08" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天8點訪問的人數有:$on8"

        on9=`cat $logFile | grep "16/Jan/2016:09" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天9點訪問的人數有:$on9"

        on10=`cat $logFile | grep "16/Jan/2016:10" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天10點訪問的人數有:$on10"

        on11=`cat $logFile | grep "16/Jan/2016:11" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天11點訪問的人數有:$on11"

        on12=`cat $logFile | grep "16/Jan/2016:12" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天12點訪問的人數有:$on12"

        on13=`cat $logFile | grep "16/Jan/2016:13" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天13點訪問的人數有:$on13"

        on14=`cat $logFile | grep "16/Jan/2016:14" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天14點訪問的人數有:$on14"

        on15=`cat $logFile | grep "16/Jan/2016:15" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天15點訪問的人數有:$on15"

        on16=`cat $logFile | grep "16/Jan/2016:16" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天16點訪問的人數有:$on16"

        on17=`cat $logFile | grep "16/Jan/2016:17" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天17點訪問的人數有:$on17"

        on18=`cat $logFile | grep "16/Jan/2016:18" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天18點訪問的人數有:$on18"

        on19=`cat $logFile | grep "16/Jan/2016:19" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天19點訪問的人數有:$on19"

        on20=`cat $logFile | grep "16/Jan/2016:20" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天20點訪問的人數有:$on20"

        on21=`cat $logFile | grep "16/Jan/2016:21" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天21點訪問的人數有:$on21"

        on22=`cat $logFile | grep "16/Jan/2016:22" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天22點訪問的人數有:$on22"

        on23=`cat $logFile | grep "16/Jan/2016:23" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

        echo "今天23點訪問的人數有:$on23"

fi

第二種方法(通過for迴圈的方式)

#!/bin/bash

read -p "請輸入要查詢的日誌檔案:" logFile

if [ -e $logFile ];then

        all=`cat $logFile | cut -d' ' -f1 | sort -n | uniq -c | sort -n | wc -l`

        echo "今天訪問的總人數為:$all人"

        for i in $(seq 0 23);do

                if [ $i -le 9 ];then

                        on0=`cat $logFile | grep "16/Jan/2016:0$i" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

                        echo "今天$i點訪問的人數有:$on0人"

                else

                        on0=`cat $logFile | grep "16/Jan/2016:$i" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

                        echo "今天$i點訪問的人數有:$on0人"

                fi

        done

else

        echo "你輸入的檔案不存在,請重新輸入!"

fi

第三種方法(通過寫方法的方式來實現,用的時候直接呼叫)

#!/bin/bash

function fileName() {

        all=`cat $logFile | cut -d' ' -f1 | sort -n | uniq -c | sort -n | wc -l`

        echo "今天訪問的總人數為:$all人"

        for i in $(seq 0 23);do

                if [ $i -le 9 ];then

                        on0=`cat $logFile | grep "16/Jan/2016:0$i" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

                        echo "今天$i點訪問的人數有:$on0人"

                else

                        on0=`cat $logFile | grep "16/Jan/2016:$i" | cut -d' ' -f1 | sort -n | uniq -c | sort -n |  wc -l`

                        echo "今天$i點訪問的人數有:$on0人"

                fi

        done

}

read -p "請輸入要查詢的日誌檔案:" logFile

if [ -e $logFile ];then

        fileName

else

        echo "你輸入的檔案不存在,請重新輸入!"

fi

wKiom1acjTOAHYJrAABna9h_Ee4012.png