Поиск десяти лучших запросчиков для десяти лучших сайтов с bash - PullRequest
0 голосов
/ 13 января 2020

Итак, у меня есть файл apache .log, в котором я нашел десять самых запрашиваемых сайтов для использования следующей команды:

cat apache.log  | awk '{print  $7} ' | awk '/.php$/' | sort | uniq -c | sort -nr | head -10 

Теперь, когда я нашел десятку лучших сайтов, я бы хотел Чтобы найти наиболее запрашиваемый IP-адрес для каждого сайта, IP-адреса перечислены в столбце «1» файла. Как мне это сделать?

Ответы [ 3 ]

0 голосов
/ 13 января 2020

Чтобы получить первую десятку запрашивающих ips в общем формате файла , вы можете сделать:

cut -d' ' -f1 apache.log | sort | uniq -c | sort -n | tail -n 10 | awk '{print $2}'
0 голосов
/ 14 января 2020

Чтобы найти топ-10 вхождений IP в apache.log, вы можете использовать что-то похожее на следующее:

awk '$7 ~ /.php$/{top[$1]++} END {for (i in top) printf "%6d - %s\n", top[i], i}' apache.log | 
sort -r -n | 
head -n10

Где awk создает массив, проиндексированный по IP, содержащий количество раз каждый IP-адрес имеет доступ к файлу .php. В правиле END вы просто выводите число вхождений и IP-адрес и перенаправляете вывод в sort -r -n, чтобы изменить сортировку по номерам c. Затем направьте трубку к head -n10, чтобы взять верхние 10.

Ваш вывод будет выглядеть так:

   622 - 72.180.70.46
     8 - 47.90.246.235
     8 - 129.211.6.66
     4 - 159.65.24.22
     2 - 192.168.6.104
     1 - 52.237.38.163
     1 - 198.199.83.39
     1 - 192.99.36.177
     1 - 18.222.26.24
     1 - 167.99.212.214

(вы можете настроить формат вывода printf по желанию)

0 голосов
/ 13 января 2020

Можете ли вы дать нам образец строки журнала с измененными IP-адресами и всем? Просто спрашиваю формат (прокомментировал бы, но мне нужно 50 репутации, поэтому я пока отвечу вслепую).

Команда, которую вы хотите использовать, выглядит примерно так:

cut -d ' ' -f 1

Здесь , мы предполагаем, что вы хотите первый (f) поле и каждое поле (d) исключается пробелами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...