统计全年的一个shell脚本

有时候需要做一些统计操作,例如统计今年以来分天的某个操作,可以写出一个伪调用

for everyday in this year

    process_program everyday

其中everyday为参数。

 

问题来了,假定现在有一个脚本process_program可以接受一天的参数,如果计算今年的呢?

尝试用下面的shell脚本吧,全手工雕琢,作为自己的统计利器了。

#!/bin/bash
 
datefile="datefile"
rm -f $datefile
 
function importOneMonthLog()
{
	start_day=1
    year=$1
    month=$2
    total_day_num=$3
    while [ $start_day -le $total_day_num ] 
    do
        if [ $start_day -lt 10 ];then
			#echo "Download ${year}${month}0${start_day} log"
            echo ${year}${month}0${start_day} >> $datefile
            #./importApiaccessLog-main.py ${year}${month}0${start_day}
        else
			#echo "Download ${year}${month}${start_day} log"
            echo ${year}${month}${start_day} >> $datefile
            #./importApiaccessLog-main.py ${year}${month}${start_day}
        fi
        start_day=`expr $start_day + 1`
    done
}
 
function importAllLogs()
{
    # 能够符合计算的log月份
    MOST_BEFORE_YEAR_MONTH="201202"   ####### 这里改起始月份
    n=1
    LAST_YEAR_MONTH=`date -d '1 months ago' +%Y%m`
    while [ $LAST_YEAR_MONTH -gt $MOST_BEFORE_YEAR_MONTH ] 
    do
        LAST_YEAR_MONTH=`date -d ''$n' months ago' +%Y%m`
        LAST_YEAR=`date -d ''$n' months ago' +%Y`
        LAST_MONTH=`date -d ''$n' months ago' +%m`
        LAST_DAY_NUM=`cal $LAST_MONTH $LAST_YEAR | xargs | awk '{print $NF}'`
		#echo "Start to download ${LAST_YEAR}${LAST_MONTH} all logs"
		importOneMonthLog ${LAST_YEAR} ${LAST_MONTH} ${LAST_DAY_NUM}
		#echo "End download ${LAST_YEAR}${LAST_MONTH} all logs"
        n=`expr $n + 1`
    done
    NOW_YEAR_MONTH=`date +%Y%m`
    NOW_YEAR=`date +%Y`
    NOW_MONTH=`date +%m`
    NOW_DAY_NUM=`date -d "1 day ago" +%d`
    #echo "Start to download this month's all logs"
	importOneMonthLog ${NOW_YEAR} ${NOW_MONTH} ${NOW_DAY_NUM} 
	#echo "End download this month's all logs"
}
 
importAllLogs
 
sort $datefile  > ${datefile}.sort
while read line
do
    ./process_program.py $line    ##############统计脚本调用
    # echo $line
done < ${datefile}.sort
 
rm $datefile
rm ${datefile}.sort

Leave a Comment.