2017-08-26 1 views
1

Par exempleListe des mots identiques et leur nombre d'occurrence dans un fichier texte

J'ai un fichier texte animal.txt qui contient:

bird 
bird 
dog 
rabbit 
dog 
cat 
rabbit 
dog 
bird 
cat 
bird 
bird 
enter code here 

je voudrais avoir un script qui peut me donner ce résultat:

$ ./program.sh animals.txt 
bird 5 
cat 2 
dog 3 
rabbit 2 

Remarque: le résultat n'a pas besoin d'être dans ce format.

Je pense qu'il n'est pas difficile d'écrire un programme simple pour lire les mots dans un tableau puis compter leur nombre d'occurrences manuellement, mais je suis ici pour vous demander une approche plus rapide et plus sale de ce problème.


Merci à tous les répondeurs. Pour moi, la meilleure solution est ici:

cat animals.txt | sort | uniq -c – 

de @cnicutar.

+5

'chat animaux.txt | trier | uniq -c' – cnicutar

+0

C'est exactement ce que je veux. – fronthem

+0

@cnicutar Serait bien si vous pouviez créer une réponse pour cela –

Répondre

2

Simple uniq + sorte + awk pipeline:

uniq -c <(sort animal.txt) | awk '{print $2,$1}' 

La sortie:

bird 5 
cat 2 
dog 3 
rabbit 2 

Je voudrais également vous recommander un autre outil appelé GNU datamash:

datamash -s -g1 count 1 <animal.txt 

La sortie (onglet \t séparés):

bird 5 
cat 2 
dog 3 
rabbit 2 
1

essayer de suivre aussi dans awk.

Solution 1ère: Si vous avez besoin d'une sortie identique à l'ordre du fichier d'entrée, le suivant peut vous aider.

awk '!a[$1]{b[++i]=$1} {a[$1]++} END{for(j=1;j<=i;j++){print b[j],a[b[j]]}}' Input_file 

Solution 2: Si vous ne prenez pas la peine de leur ordre de sortie puis en suivant peut vous aider.

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