Я иногда использую эту строку в своем терминале для наблюдения, какой агент пользователя использует мой сервер больше.
cat /var/log/apache2/access.log | awk -F\" '{print $6}' | sort | uniq -c | sort -n
Сканирует access.log и шоу в порядке возрастания агенты пользователя, которые оно несколько раз находило.
Результат - что-то вроде этого:
10283 Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1
23247 Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36
40063 MauiBot (crawler.feedback+dc@gmail.com)
143724 Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
192741 Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
Я понятия не имею, как это работает, так давно я нашел его где-нибудь, или кто-то дал мне дату, я не помню.
Так или иначе, возможно, делают то же самое, но заказывающий для IP?
Я думаю, что IP на первом столбце в журнале, попробовать
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -n
Оценка от того, что Вы используете awk -F \" { print $6}
там, это появляется как объединенный формат журнала, который должен иметь IP-адрес в поле $1
. Оттуда, мы можем просто сделать uniq в awk, затем объединить это с сортировкой индексов в ассоциативных массивах.
С насмешкой access.log
файл как это:
127.0.0.1 - - [05/Feb/2012:17:11:55 +0000] "GET / HTTP/1.1" 200 140 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.5 Safari/535.19"
192.168.0.2 - - [05/Feb/2012:17:11:55 +0000] "GET / HTTP/1.1" 200 140 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.5 Safari/535.19"
127.0.0.1 - - [05/Feb/2012:17:11:55 +0000] "GET / HTTP/1.1" 200 140 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.5 Safari/535.19"
awk
код должен быть как так:
$ awk '{!a[$1]++}; END{n=asorti(a,sorted);for(i=1;i<=n;i++) print sorted[i],":",a[sorted[i]]}' access.log
127.0.0.1 : 2
192.168.0.2 : 1
Для числовой сортировки по количеству записей для каждого IP-адреса мы можем просто придерживаться sort
в конце:
$ awk '{!a[$1]++}; END{for(val in a) print val,":",a[val];}' access.log | sort -n --field-separator=":" -k 2,2
Конечно, необходимо использовать /var/log/apache2/access.log
как Ваш фактический входной файл.