Apache access.log сортировка хитов ip и пользовательский вывод результатов - PullRequest
0 голосов
/ 09 марта 2020

Я пытался отсортировать и настроить печать результатов из файла apache .log. Ситуация такова, что я хотел бы видеть результаты как:

Выходные данные должны представлять общее число посещений за месяц, отсортированные по месяцам

Выходные данные должны выглядеть следующим образом:

Nov 2017 hits count - 12512

Dec 2017 hits count - 10087

Jan 2018 hits count - 12561

Вот часть access.log для справки:

91.244.19.43 - - [12/Dec/2015:19:02:36 +0100] "GET / HTTP/1.1" 404 239 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "-"
91.244.19.43 - - [12/Dec/2015:19:02:36 +0100] "GET /images/ HTTP/1.1" 200 1963 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "-"
91.244.19.46 - - [12/Dec/2015:19:02:36 +0100] "GET /template/ HTTP/1.1" 200 10004 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "-"
91.244.19.43 - - [12/Dec/2015:19:02:36 +0100] "GET /wp-login.php HTTP/1.1" 200 1801 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "-"
193.47.55.21 - - [12/Dec/2015:19:02:36 +0100] "GET /wp-admin/ HTTP/1.1" 200 1457 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "-"
193.47.55.21 - - [12/Dec/2015:19:02:36 +0100] "GET /template/ HTTP/1.1" 200 3465 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "-"
11.114.21.37 - - [12/Dec/2015:19:02:36 +0100] "GET /wp-login.php HTTP/1.1" 200 4890 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "-"

Я придумал что-то вроде этого:

cat access.log |sort -k1n|awk '{print $4}'|cut -d: -f1|cut -d/ -f2-3|sed 's/\[//g'|tr '/' ' '|sort -k2n -k1M

Он выполняет свою работу, печатая год / месяц и количество совпадений, но мне нужно, чтобы результат был как в примере выше. Другими словами, я хочу поместить «количество обращений» между временным интервалом и числовым значением фактического количества обращений. Есть идеи, как мне это сделать?

Заранее спасибо.

1 Ответ

0 голосов
/ 09 марта 2020
cat access.log | awk '{ print substr($4,5,3),substr($4,9,4) }' | \
 sort -k1  | \
 uniq -c | \
 gawk '{ print $2,$3,"hits count - ",$1}'

Сначала напечатайте месяц и год,

, затем отсортируйте (не нужно),

, затем подсчитайте uniq строк,

, затем напечатайте month, year, "hits count -" и подсчитанное число.

...