Contando as ocorrências da string

6

Como entrada, temos alguns ids que são strings. Como calculamos qual identificador apareceu com mais frequência e quantas vezes?

Exemplo

Entrada:

cat 
dog 
cat
dog
dog
dog 
dog 
fly
spider
spider
cat
cat

Saída:

dog 5
    
por user70485 04.06.2014 / 13:09

3 respostas

11

Você pode usar os comandos sort & uniq -c para contar as ocorrências de todas as sequências como esta:

$ sort sample.txt | uniq -c
      4 cat
      5 dog
      1 fly
      2 spider

Se você quer apenas o "cachorro" de uma só linha, pode usar grep antes ou depois.

depois

$ sort sample.txt | uniq -c | grep dog
      5 dog

antes

$ grep dog sample.txt  | uniq -c
      5 dog

Como funciona

O comando uniq -c contará todas as strings exclusivas que são apresentadas, mas a lista precisa estar em ordem de classificação primeiro. Daí porque usamos o comando sort antes de fazer a contagem.

O comando grep é para selecionar coisas na saída que são de interesse. Você pode coisa de grep como um filtro que pode agir de forma inclusiva ou exclusiva, dependendo do que você quer da saída.

O comando sort pode classificar dados com base em regras. Neste caso, estamos deixando que ele se comporte em seu modo padrão, por isso, classifica os dados com base em um conjunto alfanumérico de regras de classificação.

    
por 04.06.2014 / 13:19
8

Se você está procurando apenas uma string:

grep -cxF dog

ou

echo "dog: $(grep -cxF dog)"

Uma solução eficiente para uma lista completa:

> awk '{a[$0]++}; END {for (val in a) print val ": " a[val];}' file
spider: 2
cat: 4
fly: 1
dog: 5
    
por 04.06.2014 / 13:28
2

Reorganize os dados com sort e conte as ocorrências correspondentes usando uniq -c

sort < input.txt | uniq -c
    
por 04.06.2014 / 13:19