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
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
.
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
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}'
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];}'
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.