Versão menos cara de 'sort -n | uniq -c | sort -n '

3

Eu tenho uma lista não classificada de IPs que preciso contar e classificar por ocorrências.
Eu uso sort -n | uniq -c | sort -n e isso funciona bem, mas eu gostaria de algo menos caro ... certamente awk pode fazer isso?

Entrada

1.1.1.1
2.2.2.2
1.1.1.1
3.3.3.3
2.2.2.2
1.1.1.1

Saída

3 1.1.1.1
2 2.2.2.2
1 3.3.3.3
    
por Jan 29.10.2017 / 22:28

1 resposta

6

Com um único processo awk :

awk '{ a[$1]++ }END{ for(i in a) print a[i],i }' file

A saída:

3 1.1.1.1
2 2.2.2.2
1 3.3.3.3

Para gerar registros classificados por número de ocorrências em ordem descendente, use a seguinte abordagem awk do GNU:

awk 'BEGIN{ PROCINFO["sorted_in"]="@val_num_desc" }{ a[$1]++ }
     END{ for(i in a) print a[i],i }' file
    
por 29.10.2017 / 22:42