В этой короткой заметке речь пойдет о обработке файле лога стандарта combined для анализа user-agent. В конфигурационном файле Apache это выглядит так:

CustomLog "/var/log/httpd/somesite_access_log" combined

а в конфигурационном файле nginx:

access_log /var/log/nginx/somesite_access.log combined;

Строка в файле имеет вид:

178.216.0.216 - - [28/Oct/2010:00:09:36 +0300] "GET / HTTP/1.1" 301 20 "http://www.kharkovforum.com/showthread.php?p=15699158" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/2010
0722 Firefox/3.6.8 ( .NET CLR 3.5.30729)"

Это кстати реальная строка из лога одного моего сайта. Как видно в файл пишется IP-адрес, дата, запрос, код ответа, длина заголовка, реферер, агент. Собственно для получения отсортированного в порядке убывания списка, включающего количество одинаковых строк в исходном файле, можно запустить следующую команду:

# awk '{ i=split($0, Arr, "\""); print Arr[6] }' somesite_access.log | sort | uniq -c | sort -r > user-agents.txt

Для чтения файла под Windows необходимо добавить в каждой строке еще один символ перевода строки:

# awk '{print $0 "\n" }' user-agents.txt > win-user-agents.txt

На базе материала заметки можно писать скрипты, создающие более информативную статистику с агрегацией по браузерам, операционных системах и т.д.