По сути есть логи формата (не важен формат особо, привожу для примера):
... 212.47.xx.xx:41245 for example.com.
... 88.80.xx.xx:62212 for example2.com.
... 212.47.xx.xx:41245 for domain3.com.
Для начала вычленяем IP адреса:
cat test.log | awk '{print $2}' | cut -f1 -d\:
Результат:
~# cat test.log | awk '{print $3}' | cut -f1 -d\:
212.47.xx.xx
88.80.xx.xx
212.47.xx.xx
Далее сортируем и считаем количество уникальных IP:
cat test.log | awk '{print $3}' | cut -f1 -d\: | sort | uniq -c
Но если лог большой и адресов много, то список получится разрозненным, поэтому его нужно еще раз отсортировать используя sort -n
и далее можно вывести топ 30 например при помощи tail
:
cat test.log | awk '{print $4}' | cut -f1 -d\: | sort | uniq -c | sort -n | tail -n 30
В этом случае топ будет считаться снизу вверх, можно зереверсить при помощи sort -nr | head -30
Еще
- Инструмент по теме: https://goaccess.io/