完全原创,自己写的一个脚本,Nginx前20个访问IP的抓取,执行脚本后,会不断的提取日志,直接你输入0后才会停止,否则会一直循环下去,时间可以自己定,脚本如下:

#!/bin/bash

# date 2013-04-24
# Liuyang
# nginx log file directory
nginxlogdir="/opt/server/nginx/logs"
nginxlog="$nginxlogdir/data.zgzcw.com.access.log"
#Start collecting log
start_time=$(date +"%F %X")
factorial=1
echo "Start time:$start_time"
tail -f  $nginxlog | awk '{ print $1 }' > /root/nginx.log &
while [ "$factorial" -le 10 ]
do
    echo "please input the stop number:[0]"
    stty -echo
    read num
    stty echo
    if [ $num == 0 ]; then
        ps aux | grep "tail -f $nginxlog" | grep -v grep | awk '{ print $2 }' | xargs kill -9
        factorial=11
    fi
done
stop_time=$(date +"%F %X")
echo " "
echo "Stop time: $stop_time"
echo " "
echo "$start_time   ~    $stop_time"
echo " "
#Most visted 20 IP
echo "Most visted 20 IP:"
printf "Frequency    IP\n"
cat /root/nginx.log |grep -v - | awk '{ print $1 }' | sort -n|uniq -c|sort -nr \
                   |head -20 | sed 's/^ *//g' | awk 'BEGIN {FS=" "}{printf("%d\t%s\n",$1,$2)}'