“agrupar por contagem” para IPs no arquivo de texto no linux

5

Eu tenho um imenso textfile que contém endereços 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

Eu posso classificá-lo para:

123.33.22.33
123.33.22.33
123.33.22.33
221.23.128.2
92.222.192.12
92.222.192.12

e veja (com o olho nu) que o primeiro IP ocorre três vezes, o segundo uma vez e o último duas vezes.

Gostaria de poder fazer isso em enormes arquivos de log, obviamente de maneira automatizada. É possível?

obrigado

    
por cherouvim 28.03.2011 / 14:10

3 respostas

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

classificará desc por contagens de ip, mostrando os contadores na primeira coluna

por exemplo,

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:~# 
    
por 28.03.2011 / 14:13
2

Uma vez que você tenha classificado, você pode canalizá-lo através do uniq -c

cat sorted.list | uniq -c

  2 1.2.3.4
  1 5.6.7.8

Isso conta as contagens para você.

    
por 28.03.2011 / 14:17
2

Você pode usar uniq -c para obter uma contagem, mas certifique-se de classificar primeiro a entrada ou obter apenas contagens de linhas semelhantes e consecutivas:

sort yourfile | uniq -c

Eu geralmente classifico pelas linhas com mais correspondências:

sort yourfile | uniq -c | sort -nr
    
por 28.03.2011 / 14:18