Disons que j'ai un fichier qui contient:
A
A
A
B
CC
Je veux avoir la sortie comme ceci:
A 3
B 1
CC 1
text-processing
Cheng
la source
la source
uniq -c filename.txt | sed 's/[^0-9]*\\([0-9]\+\\) \\(.*\\)/\2 \1/'
sort | uniq
A \ A \ A \ B \ A \ CC
, la sortie de justeuniq -c
s'afficheraitA 3
et s'afficherait plus tardA 1
. Le tri en premier garantira que toutes les lignes identiques sont regroupéesJe viens de venir ici avec un problème similaire. De là, j'ai réussi à mettre sur pied une commande légèrement plus avancée, qui, je l'espère, est utile pour les autres.
Comme Steven D l'a dit dans les commentaires ci-dessus
uniq
ne compte que les lignes de répétition adjacentes, vous devez donc d'abord trier les lignes. Après cela, nous trouvons les lignes uniques, puis trions à nouveau afin que les lignes les plus fréquentes soient au sommet.La sortie est redirigée vers le fichier
output.txt
. Si vous souhaitez simplement afficher les résultats sur la ligne de commande, supprimez la redirection et changez la dernière commande ensort -n
afin que la ligne la plus courante soit en bas, c'est-à-dire définitivement toujours à l'écran.la source
cat file.txt | sort
par justesort file.txt
. :)cat
par quelque chose de plus intéressant. Depuis, vous savez, il n'y en a pascat
.< file.txt sort | uniq -c
. Ceci est facile à modifier et évite tout de même l'inutilecat
.