shell腳本:腳本分析彙總ping日誌文件

腳本功能:用於分析彙總大量ping日誌文件

------------------

#!/bin/bash
# check ping result
# by colin
# on 2016-06-08
########################################
# 功能說明:該腳本用於分析彙總某項目在線ping日誌文件
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
LOGNAME='data/store/logs/record/ping.log'
GREPKEY='ping statistics'
WORKDIR='/tmp/checkPingResult'
TEMPPINGFILE="${WORKDIR}/temppingfile.txt"
CHECKRESULT="${WORKDIR}/temp_check_result.txt"

EMAIL=(
    colin@郵件地址.cn
)

TRAIN_CTZX=(
    k1364_k817:cdyd:ctzx_42
    k1364_k817:cdyd:ctzx_58
    k1364_k817:cdyd:ctzx_49
    k1364_k817:cdyd:ctzx_56
    k1364_k817:cdyd:ctzx_55
    k1364_k817:cdyd:ctzx_59
    k1364_k817:cdyd:ctzx_39
    k1364_k817:cdyd:ctzx_22
    k1364_k817:cdyd:ctzx_46
    k1364_k817:cdyd:ctzx_36
    k1364_k817:cdyd:ctzx_27
    k1364_k817:hrbdx:ctzx_26
    k1364_k817:hrbdx:ctzx_1
    k1364_k817:cddx:ctzx_51
    k1364_k817:cddx:ctzx_40
    k351_k352:cdyd:ctzx_2
    k351_k352:cdyd:ctzx_4
    k351_k352:cdyd:ctzx_5
    k351_k352:cdyd:ctzx_8
    k351_k352:cdyd:ctzx_9
    k351_k352:cdyd:ctzx_10
    k351_k352:cdyd:ctzx_12
    k351_k352:cdyd:ctzx_13
    k351_k352:cdyd:ctzx_14
    k351_k352:cdyd:ctzx_15
    k351_k352:cdyd:ctzx_16
    k351_k352:cdyd:ctzx_17
    k351_k352:cdyd:ctzx_19
    k1223_k1224:hrbdx:ctzx_33
    k1223_k1224:hrbdx:ctzx_34
    k1223_k1224:cddx:ctzx_41
    k1223_k1224:cddx:ctzx_47
    k1223_k1224:cddx:ctzx_54
    k1223_k1224:cdyd:ctzx_23
    k1223_k1224:cdyd:ctzx_38
    k1223_k1224:cdyd:ctzx_45
    k1223_k1224:cdyd:ctzx_48
    k1223_k1224:cdyd:ctzx_50
    k1223_k1224:cdyd:ctzx_60
)

sendEmail(){
    TEMP_EMAIL_FILES=$1
    [ $(wc -l ${TEMP_EMAIL_FILES}|awk '{print $1}') -eq 0 ] || { 
        for i in ${EMAIL[@]}
        do
            dos2unix -k ${TEMP_EMAIL_FILES} 
            mail -s "${HOSTNAME}: CTZX CHECK PING RESULT" ${i} < ${TEMP_EMAIL_FILES}
        done
    }
    [ -e ${TEMP_EMAIL_FILES} ] && rm ${TEMP_EMAIL_FILES}
}

[ -d ${WORKDIR} ] && rm ${WORKDIR} -rf
[ -f ${CHECKRESULT} ] && rm ${CHECKRESULT} 
mkdir -p ${WORKDIR}/temp/ && cd ${WORKDIR} && {
    for TARFILE in $(find /home/upload/ctzx/ct_tongji/ -name 'pinglog.tar.gz')
    do
        DEVNAME=$(echo "${TARFILE}"|awk -F/ '{print $(NF-1)}')
        for T_DEV_ID in ${TRAIN_CTZX[@]}
        do
            TRAIN_ID=$(echo ${T_DEV_ID}|awk -F: '{print $1}')
            CARD_ID=$(echo ${T_DEV_ID}|awk -F: '{print $2}')
            DEV_ID=$(echo ${T_DEV_ID}|awk -F: '{print $3}')
            [ ${DEVNAME} = ${DEV_ID} ] && break
        done
        TARFILENAME=$(echo "${TARFILE}"|awk -F/ '{print $NF}')
        cp ${TARFILE} .
        tar -zxf ${TARFILENAME} && rm -f ${TARFILENAME}
        ##
        # 加-n參數添加行號,-A 2取出的數據,有遇到第三行爲空的情況
        #
        grep -n -A 2 "${GREPKEY}" ${LOGNAME}|grep -v "${GREPKEY}"|sed -r 's/[^0-9\.]+/ /g'|sed 's/^ //g'|grep -v "^$" |awk '{$1="";print $0}' > ${TEMPPINGFILE}
        PACKETS_TRANSMITTED=$(sed -n 'p;n' ${TEMPPINGFILE}|awk '{sum+=$1} END {print sum}')
        PACKETS_RECEIVED=$(sed -n 'p;n' ${TEMPPINGFILE}|awk '{sum+=$2} END {print sum}')
        PACKET_LOSS=$(sed -n 'p;n' ${TEMPPINGFILE}|awk '{sum+=$3} END {print sum/NR}')
        PING_MIN=$(sed -n 'n;p' ${TEMPPINGFILE}|grep -vE "([0-9]{1,3}\.){3}" |awk '{print $1}' |sort -n|uniq|sed -n '1p')
        PING_AVG=$(sed -n 'n;p' ${TEMPPINGFILE}|grep -vE "([0-9]{1,3}\.){3}"|awk '{sum+=$2} END {print sum/NR}')
        PING_MAX=$(sed -n 'n;p' ${TEMPPINGFILE}|grep -vE "([0-9]{1,3}\.){3}" |awk '{print $3}' |sort -n|uniq|sed -n '$p')
        echo "${PACKETS_TRANSMITTED},${PACKETS_RECEIVED},${PACKET_LOSS},${PING_MIN},${PING_AVG},${PING_MAX}" >> ${WORKDIR}/temp/${TRAIN_ID}_a_${CARD_ID}
        [ -f ${TEMPPINGFILE} ] && rm ${TEMPPINGFILE}
    done
}

groupPingResult(){
    CHECKFILENAME=$1
    PACK_SENT_ALL=$(awk -F, '{sum+=$1} END {print sum}' ${CHECKFILENAME})
    PACK_RECEIVE_ALL=$(awk -F, '{sum+=$2} END {print sum}' ${CHECKFILENAME})
    PACK_LOSS_AVG=$(printf %0.2f $(awk -F, '{sum+=$3} END {print sum/NR}' ${CHECKFILENAME}))
    PING_MIN_AVG=$(printf %0.2f $(awk -F, '{sum+=$4} END {print sum/NR}' ${CHECKFILENAME}))
    PING_AVG_AVG=$(printf %0.2f $(awk -F, '{sum+=$5} END {print sum/NR}' ${CHECKFILENAME}))
    PING_MAX_AVG=$(printf %0.2f $(awk -F, '{sum+=$6} END {print sum/NR}' ${CHECKFILENAME}))
    ALL_RESULT="${PACK_SENT_ALL},${PACK_RECEIVE_ALL},${PACK_LOSS_AVG},${PING_MIN_AVG},${PING_AVG_AVG},${PING_MAX_AVG}"
}

cd ${WORKDIR}/temp/ && {
    for i in $(find . -name "*_a_*")
    do
        TRAINCARD=$(echo $i | awk -F/ '{print $NF}')
        groupPingResult ${TRAINCARD}
        TRAINCARD_NAME=$(echo ${TRAINCARD} | sed 's/_a_/,/g')
        echo "${TRAINCARD_NAME},${ALL_RESULT}" >> ${CHECKRESULT}
        [ -f ${TRAINCARD} ] && rm ${TRAINCARD} -f
    done
    cat ${CHECKRESULT}|sort -n -t, -k5 > ${WORKDIR}/check_result.txt
    sed -i '1i車次,卡類型,總髮送包,總接收包,丟失率,PING_MIN,PING_AVG,PING_MAX' ${WORKDIR}/check_result.txt
    #cat ${CHECKRESULT}|sort -n -t, -k5 > ${WORKDIR}/t_check_result.txt
    #sed -i '1i車次,卡類型,總髮送包,總接收包,丟失率,PING_MIN,PING_AVG,PING_MAX' ${WORKDIR}/t_check_result.txt
    #column -s, -t ${WORKDIR}/t_check_result.txt > ${WORKDIR}/check_result.txt
    #[ -f ${WORKDIR}/t_check_result.txt ] && rm ${WORKDIR}/t_check_result.txt
    [ -f ${CHECKRESULT} ] && rm ${CHECKRESULT}
    sendEmail ${WORKDIR}/check_result.txt
}

------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章