Назад | Перейти на главную страницу

«Группировать по количеству» для IP-адресов в текстовом файле в Linux

У меня есть огромный текстовый файл, содержащий IP-адреса:

123.33.22.33
221.23.128.2
123.33.22.33
92.222.192.12
92.222.192.12
123.33.22.33

Я могу отсортировать его по:

123.33.22.33
123.33.22.33
123.33.22.33
221.23.128.2
92.222.192.12
92.222.192.12

и видите (невооруженным глазом), что первый IP-адрес встречается три раза, второй - один раз, а последний - дважды.

Я хотел бы иметь возможность делать это в огромных лог-файлах, очевидно, автоматически. Является ли это возможным?

Спасибо

cat file_with_ips | sort -nr | uniq -c | sort -nr -k 1

отсортирует desc по количеству IP-адресов, показывая счетчики в первом столбце

например

root@pinkpony:~# cat /tmp/xx
123.33.22.33
221.23.128.2
123.33.22.33
92.222.192.12
92.222.192.12
123.33.22.33
root@pinkpony:~# cat /tmp/xx | sort -nr | uniq -c | sort -nr -k1
      3 123.33.22.33
      2 92.222.192.12
      1 221.23.128.2
root@pinkpony:~# 

Вы можете использовать uniq -c для подсчета, но не забудьте сначала отсортировать ввод, иначе вы получите только подсчет последовательных одинаковых строк:

sort yourfile | uniq -c

Затем я часто сортирую его по строкам с наибольшим количеством совпадений:

sort yourfile | uniq -c | sort -nr

После того, как вы его отсортировали, вы можете передать его через uniq -c

cat sorted.list | uniq -c

  2 1.2.3.4
  1 5.6.7.8

Это будет для вас подсчетом.