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
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.
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
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