Comment faire un tri naturel sur uniq -c
sortie?
Lorsque le nombre est <10, le uniq -c | sort
la sortie semble correcte:
alvas@ubi:~/testdir$ echo -e "aaa\nbbb\naa\ncd\nada\naaa\nbbb\naa\nccd\naa" > test.txt
alvas@ubi:~/testdir$ cat test.txt
aaa
bbb
aa
cd
ada
aaa
bbb
aa
ccd
aa
alvas@ubi:~/testdir$ cat test.txt | sort | uniq -c | sort
1 ada
1 ccd
1 cd
2 aaa
2 bbb
3 aa
mais lorsque les nombres sont> 10 et même en milliers/centaines, le tri est erroné car il trie par chaîne et non par tri entier naturel:
alvas@ubi:~/testdir$ echo -e "aaa\nbbb\naa\nnaa\nnaa\naa\nnaa\nnaa\nnaa\nnaa\nnaa\nnaa\nnaa\nnaa\nnnaa\ncd\nada\naaa\nbbb\naa\nccd\naa" > test.txt
alvas@ubi:~/testdir$ cat test.txt | sort | uniq -c | sort
10 naa
1 ada
1 ccd
1 cd
1 nnaa
2 aaa
2 bbb
4 aa
Comment faire une sortie de tri naturel de "uniq -c" dans l'ordre décroissant/croissant?
Utilisation -n
dans votre commande sort
, pour qu'elle soit triée numériquement. Aussi -r
vous permet d'inverser le résultat:
$ sort test.txt | uniq -c | sort -n
1 ada
1 ccd
1 cd
1 nnaa
2 aaa
2 bbb
4 aa
10 naa
$ sort test.txt | uniq -c | sort -nr
10 naa
4 aa
2 bbb
2 aaa
1 nnaa
1 cd
1 ccd
1 ada
De man sort
:
- n, - tri numérique
comparer selon la valeur numérique de la chaîne
- r, --reverse
inverser le résultat des comparaisons