说明:此脚本可以接受选项(i,d,t,a),使用格式:analyzelog <-i IP|-d DATE|-t TYPE|-a> LOG_FILE :
(1)当用户使用选项-i时,统计出LOG_FILE文件中指定IP地址的访问次数(通常每一行为一次);
(2)当用户使用选项-d时,统计出LOG_FILE文件中指定日期(某一天,如:16/Feb/2012)内每个IP地址访问的次数;如:
192.168.0.1:33
192.168.0.195:17
...
(3)当用户使用选项-t时,统计出LOG_FILE文件中以后缀后指定类型的文件(如.png表示png格式的图片)被访问的次数;
(4)当用户使用选项-a时,统计出LOG_FILE文件中每个IP地址访问的次数;
# Author: Honway.Liu
# Date: 2012-03-02
# Description:
###########################################
########## Script Start #################
###########################################
#Part 1: Define some function
###########################################
ACCESS_COUNT()
{
echo "The $OPTARG access count: `grep $OPTARG $FILENAME | wc -l`"
}
DATE_COUNT()
{
echo "The $OPTARG access count list:"
cat $FILENAME | grep $OPTARG | cut -d' ' -f1 | sort | uniq -c | sort -n | awk -F ' ' '{print $2 ":\t"$1 }'
}
TYPE_COUNT()
{
T=`cat $FILENAME | cut -d' ' -f7 | grep ${OPTARG}$ | wc -l`
echo "The $OPTARG access aount: $T"
}
ALL_IP_COUNT()
{
cat $FILENAME | cut -d' ' -f1 |sort|uniq -c| sort -n|awk -F ' ' '{print $2 ":\t"$1 }'
}
Usage()
{
cat <<EOF
#######################################################
Usage :$0 <-i IPADDR|-d DATE|-t FILETYPE|-a> FILENAME"
Accept date type: 01/Mar/2012
#######################################################
EOF
}
# Part 2: Please give a option else whill exit
if [ $# -le 1 ]; then
Usage
exit
fi
########################################################
# Part 3: Main script.
while getopts ":i:d:t:a" OPT ; do
shift $[$OPTIND-1]
FILENAME=$1
if [ -z $FILENAME ]; then
Usage
exit 0
fi
case $OPT in
i) ACCESS_COUNT ;;
d) DATE_COUNT ;;
t) TYPE_COUNT ;;
a) ALL_IP_COUNT ;;
*) Usage ;;
esac
done