Bash 셸을 사용하여 Apache 로그 구문 분석
- bash 셸(버전 5.0)을 사용하여 Apache 로그를 구문 분석하여 일일 요청 및 IP당 요청에 대한 통계를 인쇄합니다. 해커랭크 코드
작업: Apache 액세스 로그 파일을 구문 분석하고 분석하는 Bash 스크립트를 만듭니다. 로그 파일의 경로는 스크립트(LOG_FILE)의 입력입니다.
solution.sh /var/log/access.log
상위 10개 결과로 제한되고 선행 공백 없이 가장 높은 값에서 가장 낮은 값으로 숫자로 정렬된 두 가지 통계를 출력해야 하며 키 값이 더 큰 행은 나중에 출력되는 대신 출력에서 먼저 나타납니다.스크립트는 두 결과를 차례로 출력해야 하며 각 행은 공백이나 표를 구분 기호로 사용하여 QUANTITY FILED 형식이어야 합니다.
172.19.0.100 - - [15/Feb/2020:22:32:02 +0000] "GET /index HTTP/1.1" 200 14034 "-" "Mozilla/5.0 (compatible; SemrushBot/6~bl; +http://www.semrush.com/bot.html)" "172.19.0.4"
172.19.0.100 - - [16/Feb/2020:22:31:32 +0000] "GET /site HTTP/1.1" 200 36565 "https://command-not-found.com/curl" "Mozilla/5.0+(compatible; UptimeRobot/2.0; http://www.uptimerobot.com/)" "172.19.0.3"
172.19.0.101 - - [16/Feb/2020:22:30:10 +0000] "GET /credits HTTP/1.1" 200 31067 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "172.19.0.2"
172.19.0.102 - - [17/Feb/2020:22:30:10 +0000] "GET /index HTTP/1.1" 200 31067 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "172.19.0.2"
172.19.0.100 - - [18/Feb/2020:22:35:10 +0000] "GET /index HTTP/1.1" 200 31067 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "172.19.0.2"
2 16/Feb/2020
1 18/Feb/2020
1 17/Feb/2020
1 15/Feb/2020
3 172.19.0.100
1 172.19.0.102
1 172.19.0.101
#!/usr/bin/env bash
LOG_FILE="$1"
https://github.com/vumdao/bash/blob/master/codility/solution.sh
#!/usr/bin/env bash
LOG_FILE="$1"
function request_per_day() {
declare -A day_array
while read line; do
day=$(echo "$line" | sed 's/.*\[//g;s/].*//g;s/:.*//g')
if [[ -v day_array[$day] ]]; then
day_array[$day]=$((day_array[$day]+1))
else
day_array[$day]=1
fi
done < $LOG_FILE
for day in ${!day_array[@]}; do echo ${day_array[$day]} $day; done | sort -rn | head -10
}
function request_per_ip() {
declare -A ip_array
while read line; do
ip=$(echo $line | awk '{print $1}')
if [[ -v ip_array[$ip] ]]; then
ip_array[$ip]=$((ip_array[$ip]+1))
else
ip_array[$ip]=1
fi
done < $LOG_FILE
for ip in ${!ip_array[@]}; do echo ${ip_array[$ip]} $ip; done | sort -rn | head -10
}
request_per_day
echo ""
request_per_ip
· 깃허브 · 편물 · · · 페이지 ·
Reference
이 문제에 관하여(Bash 셸을 사용하여 Apache 로그 구문 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vumdao/using-bash-shell-to-parsing-apache-logs-4pi0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)