Contando o número de vezes que cada endereço IP aparece no arquivo de log

9

Eu tenho um arquivo no formato da seguinte forma:

$ cat file.txt

27.33.65.2
27.33.65.2
58.161.137.7
121.50.198.5
184.173.187.1
184.173.187.1
184.173.187.1

Qual é a melhor maneira de analisar o arquivo file.txt em um formato como:

27.33.65.2: 2
58.161.137.7: 1
121.50.198.5: 1
184.173.187.1: 3

Em outras palavras, quero percorrer o arquivo e contar o número de vezes que cada endereço IP aparece. Já passei por sort , então todos os endereços IP estão em ordem e diretamente um após o outro.

    
por James Spittal 06.03.2014 / 01:57

2 respostas

19

Você está procurando uniq -c

Se a saída não for do seu agrado, pode ser analisada e reformatada prontamente.

Por exemplo:

$ uniq -c logfile.txt | awk '{print $2": "$1}'
27.33.65.2: 2
58.161.137.7: 1
121.50.198.5: 1
184.173.187.1: 3
    
por 06.03.2014 / 02:15
6

uniq parece ser a solução mais inteligente, de fato. O jeito estranho:

awk '{ip_count[$0]++}; '\
'END {for (ip in ip_count) printf "%15s: %d\n",ip,ip_count[ip];}' file
    
por 06.03.2014 / 02:23

Tags