У меня есть файл журнала apache. Мне нужно сообщить, сколько строк (запросов) из определенного корня контекста. Журналы apache уже начинаются с косой черты, а корень контекста - до второй косой черты.
Пример журнала Apache:
11.222.33.44 - - [14/Feb/2013:00:27:33 -0600] "GET /lifecontent/monitor?test=siteseer&format=siteseer HTTP/1.1" 200 275 "-" "Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)" "SSL=on"
111.22.333.44 - - [14/Feb/2013:00:29:29 -0600] "GET /lc/Brokerage%20Manager/IDG%20Licensing%20and%20Appointment%20Process/IDG%20Franchise%20Reference%20Manual HTTP/1.1" 302 - "-" "(Windows NT)" "SSL=-"
Два контекстных корня будут "/ lifecontent /" и "/ lc"
Не уверены, какой инструмент подойдет лучше всего? Мне нравится графический интерфейс или пакетное решение.
В основном я просто пытаюсь выяснить, какой процент каждого корня контекста используется в файлах apache. (В идеале он может искать сразу в нескольких файлах, но это не обязательно.)
Вы можете сделать это с помощью простого сценария оболочки:
cut -d/ -f4 access.log | sort | uniq -c | sort -g
В cut
команда извлекает 5-е / -ограниченное поле (т.е. "корень контекста"), sort | uniq -c
затем подсчитывает количество вхождений каждого и sort -g
упорядочивает их по количеству вхождений.
Запуск этого на моем веб-сервере дает:
5477 misc
11130 bzr
32181 raspbian
35912 files
43020 sites
Я принял решение mgorven, потому что оно направило меня в правильном направлении для окончательного рабочего решения. После использования своего решения иногда встречаются значения строки запроса, а иногда корень контекста не имеет конечной косой черты. Таким образом, "/ lc /" и "/ lc" и "/ lc? X = y" считаются как "lc". Итак, я использовал это решение:
cut -d" " -f7 access.log | cut -d? -f1 | cut -d/ -f2 | sort | uniq -c | sort -g
Это покажет отдельные файлы, к которым был осуществлен доступ, и пустую строку, если был доступен только "/".
Также я сделал это в Windows, используя UnxUtils.zip: http://sourceforge.net/projects/unxutils. Все, что мне нужно было извлечь, было вырезать, отсортировать, уникнуть.
Спасибо, mgorven !!