#!/bin/bash
# 检查日志文件是否存在并可读
if [[ ! -f access.log ]]; then
echo "Error: access.log file not found or not readable."
exit 1
fi
# 定义关联数组,用于存储每个IP的访问次数、URL列表以及每个URL的访问次数
declare -A ip_count
declare -A ip_urls
declare -A url_count
# 初始化最大访问次数和对应的URL
max_count=0
max_url=""
# 读取日志文件,一次性完成所有统计
while read -r line; do
# 提取IP地址和URL
ip=$(echo "$line" | awk '{print $1}')
url=$(echo "$line" | awk '{print $7}')
# 统计每个IP的访问次数
((ip_count[$ip]++))
# 统计每个IP访问的URL
if [[ ${ip_urls[$ip]} ]]; then
ip_urls[$ip]+=",$url"
else
ip_urls[$ip]=$url
fi
# 统计每个URL的访问次数
((url_count[$url]++))
# 更新最频繁访问的URL
if [[ ${url_count[$url]} -gt $max_count ]]; then
max_count=${url_count[$url]}
max_url=$url
fi
done < access.log
# 输出每个IP的访问次数
for ip in "${!ip_count[@]}"; do
echo "$ip: ${ip_count[$ip]}"
done
# 输出每个IP访问的URL
for ip in "${!ip_urls[@]}"; do
echo "$ip: ${ip_urls[$ip]}"
done
# 如果有最频繁访问的URL,则输出
if [[ $max_count -gt 0 ]]; then
echo "Most frequent URL: $max_url (count: $max_count)"
else
echo "No URLs found in the log file."
fi
本文暂时没有评论,来添加一个吧(●'◡'●)