Tally up resultados de uma pesquisa grep?

2

Digamos que eu tenha uma lista como esta:

8
382.34.6
sally
sally
8
923
183.3.3
183.3.3
183.3.3
8

E eu quero calcular o número de vezes que cada valor único é repetido e obter uma saída assim:

8 3
382.34.6 1
sally 2
923 1
183.3.3 3

Qual comando eu precisaria executar para fazer isso? Se isso fizer diferença, a lista será proveniente de uma pesquisa grep .

    
por Evan 31.05.2015 / 05:22

4 respostas

5

Tente isto:

sort file | uniq -c | awk '{print $2,$1}'

Saída:

183.3.3 3
382.34.6 1
8 3
923 1
sally 2
    
por Cyrus 31.05.2015 / 08:29
2

Você poderia alimentar a lista por meio de | sort | uniq -c | sort -n , assim:

echo -e "8\n382.34.6\nsally\nsally\n8\n923\n183.3.3\n183.3.3\n183.3.3\n8" | \
sort | uniq -c | sort -n
      1 382.34.6
      1 923
      2 sally
      3 183.3.3
      3 8

Se você quiser as contagens após os valores, você pode acrescentar | awk '{print $2,$1}'

    
por waltinator 31.05.2015 / 07:21
2

Uma opção é usar awk da seguinte maneira: criar um array associativo, digitado pelo item a ser contado e incrementá-lo sempre que o mesmo item for lido; no final da entrada, percorra o array e imprima as chaves e contagens:

your grep command | awk '{a[$0]++;next;}; END{for (i in a) print i,a[i];}'

Uma possível vantagem é que você pode fazer a correspondência de padrões diretamente em awk , eliminando grep , ou seja,

awk '/your regex/{a[$0]++;next;}; END{for (i in a) print i,a[i];}'
    
por steeldriver 31.05.2015 / 11:28
-1

Tente isso

stuff=(apple,boat,chicken)
for (i=0; i<${#stuff}; i=i+1); do
echo INPUT | grep ${stuff[i]} | wc
done

INPUT que significa o texto a pesquisar. Preencha também o array com suas palavras.

    
por spacegeek224 31.05.2015 / 07:23