shell脚本统计nginx日志访问IP归属地
shell脚本统计nginx日志访问IP归属地并显示访问次数
此脚本为并发执行,请注意主机资源消耗
如需单个执行 需要关闭while循环代码块中的 let 和 echo 两行注释,用于统计显示进度,并注释掉while循环代码块中的{ }&两行
#!/bin/bash
LOGFILE=$1
TXT=./ip_address.txt
Tmp=./ip_list.txt
n=0
if [ $# -eq 1 ];then
if [[ $LOGFILE =~ .*\.gz$ ]]; then
COMM="zcat"
else
COMM="cat"
fi
if [ -f $TXT ]; then
>$TXT
fi
>$Tmp
$COMM $1|awk '{ip[$1]++}END{for(i in ip){print i " " ip[i]}}' >$Tmp
while read ip num ;
do
{
# let n++
# echo "共计 $(wc -l ${Tmp}|awk '{print $1}')行,正在进行${n}行"
curl -s https://ip.cn/index.php?ip=$ip|awk -v i=$ip -v N=$num -F"[><]+" '/id="tab0_address"/{printf "%-20s%-40s%-0s\n",N,i,$3}'>>$TXT
}&
done < $Tmp
wait
echo "统计完成,文件为当前目录下的${TXT#*/}, 共计:$(wc -l ${Tmp}|awk '{print $1}')行"
read -p "是否要直接查看${TXT#*/}文件内容?[yes|no]: " CAT
case $CAT in
Y|y|Yes|yes|YES)
cat ${TXT} |more
;;
*)
echo "输出完成,共计:$(wc -l ${Tmp}|awk '{print $1}')行,请查看当前目录下的${TXT#*/}文件"
exit
esac
rm -f $Tmp
else
echo -e "请传出脚本参数 \n${0} 日志路径名称(例如:/www/wwwlogs/test.log)"
fi
本文是原创文章,采用 CC BY-NC-SA 许可协议,完整转载请注明来自 半城小栈
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果