How to do natural sort output of "uniq -c" in descending/acsending order? - unix
count, natural-sort, sorting, uniq, unix
Solution
Use `-n` in your `sort` command, so that it sorts numerically. Also `-r` allows you to reverse the result:
$ 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
From `man sort`:
-n, --numeric-sort
compare according to string numerical value
-r, --reverse
reverse the result of comparisons
Problem
How to do natural sort on `uniq -c` output? When the counts are <10, the `uniq -c | sort` output looks fine: ``` 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 ``` but when the counts are > 10 and even in thousands/hundreds the sort messes up because it's sorting by string and not by natural integer sort: ``` 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 ``` How to do natural sort output of "uniq -c" in descending/acsending order?