Итак, я пытаюсь создать awk-скрипт, который определяет наибольшее количество попаданий в порядке высшей тройки. Я делаю это на основе покинуть апач веб-журнал, который выглядит какПолучение трех высоких нападающих веб-сайта через awk
192.168.198.92 - - [22/Dec/2002:23:08:37 -0400] "GET /HTTP/1.1" 200 6394 www.yahoo.com "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1...)" "-"
192.168.198.92 - - [22/Dec/2002:23:08:38 -0400] "GET /images/logo.gif HTTP/1.1" 200 807 www.yahoo.com "http://www.some.com/" "Mozilla/4.0 (compatible; MSIE 6...)" "-"
192.168.72.177 - - [22/Dec/2002:23:32:14 -0400] "GET /news/sports.html HTTP/1.1" 200 3500 www.yahoo.com "http://www.some.com/" "Mozilla/4.0 (compatible; MSIE ...)" "-"
192.168.72.177 - - [22/Dec/2002:23:32:14 -0400] "GET /favicon.ico HTTP/1.1" 404 1997 www.yahoo.com "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3)..." "-"
192.168.72.177 - - [22/Dec/2002:23:32:15 -0400] "GET /style.css HTTP/1.1" 200 4138 www.yahoo.com "http://www.yahoo.com/index.html" "Mozilla/5.0 (Windows..." "-"
192.168.72.177 - - [22/Dec/2002:23:32:16 -0400] "GET /js/ads.js HTTP/1.1" 200 10229 www.yahoo.com "http://www.search.com/index.html" "Mozilla/5.0 (Windows..." "-"
192.168.72.177 - - [22/Dec/2002:23:32:19 -0400] "GET /search.php HTTP/1.1" 400 1997 www.yahoo.com "-" "Mozilla/4.0 JJohnJoJJJJJoJJoJJJJJoJJohJJJJJJJJJJJJohnJohJoJoJJJoJJ
Для этого я делаю:
$1 ~ /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/ {
hitCounter[$1]++
notIndexed=1
for(i in ips) {
if (i==$1) { notIndexed=0 }
}
if(notIndexed==1) {
ips[indexx]=$1
indexx++
}
}
Эта линия определяет IP, а затем увеличивает счетчик совпадений для него в «счетчик посещений ", который индексируется IP-адресами. После этого я проверяю список ips, «ips», чтобы увидеть, есть ли IP-адрес попадания. Если IP-адрес не добавляется в массив «ips», а число индексов увеличивается на единицу. Теоретически, делая это, каждый индекс в «ips» должен коррелировать с индексами в «hitCounter». Наконец у меня есть ...
END {
indexxx=0
for (i in hitCounter) {
if (i>hitCounter[firstIP])
firstIP=ips[indexxx]
else if (i>hitCounter[secondIP])
secondIP=ips[indexxx]
else
thirdIP=ips[indexxx]
indexxx++
}
}
Именно здесь я иду через IP попал счетчики в «счетчик посещений», сравнить их с хитами в трех высоких хит переменных и, если IP-хит больше чем один из трех данных с высокой степенью попадания, я установил его на текущий IP.
Кажется, что он должен работать на меня, и я должен получить «192.168.72.177 192.168.198.92» в качестве вывода, но вместо этого получаю «192.168.198.92 192.168.198.92».
Почему?
EDIT: К сожалению, это, как я печатаю окончательные результаты которых размещен сразу после «счетчик посещений» Еогеасп петли ...
print "The most hits were from "firstIP" "secondIP" "thirdIP
Я не вижу никаких утверждений 'print'. Пожалуйста, разместите более полную версию своего сценария. Кстати, все в порядке для повторного использования переменных - нет необходимости в 'indexxx'. –
Вы действительно не должны считать хиты для таких вещей, как код ответа 404 на 'favicon.ico'. Кроме того, множественные связанные выборки не являются отдельными ударами. Если кто-то обращается к одной странице с четырьмя изображениями, одной каскадной таблицей стилей и одним значком, то есть не пять попаданий !!! – Kaz
См. Мой отредактированный ответ, в котором исправлено упоминание Джонатана Леффлера. –