Как сделать вывод натурального сорта "uniq -c" в порядке убывания/сокращения? - unix

Как сделать естественную сортировку на выходе uniq -c?

Когда значения count < 10, вывод uniq -c | sort выглядит нормально:

[email protected]:~/testdir$ echo -e "aaa\nbbb\naa\ncd\nada\naaa\nbbb\naa\nccd\naa" > test.txt
[email protected]:~/testdir$ cat test.txt
aaa
bbb
aa
cd
ada
aaa
bbb
aa
ccd
aa
[email protected]:~/testdir$ cat test.txt | sort | uniq -c | sort
      1 ada
      1 ccd
      1 cd
      2 aaa
      2 bbb
      3 aa

но когда counts > 10 и даже в тысячах/сотнях, сортировка беспорядочна, потому что она сортируется по строкам, а не по натуральной целочисленной сортировке:

[email protected]:~/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
[email protected]:~/testdir$ cat test.txt | sort | uniq -c | sort
     10 naa
      1 ada
      1 ccd
      1 cd
      1 nnaa
      2 aaa
      2 bbb
      4 aa

Как сделать вывод натурального сорта "uniq -c" в порядке убывания/сокращения?

Ответ 1

Используйте -n в вашей команде sort, чтобы она сортировалась численно. Также -r позволяет отменить результат:

$ 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

От man sort:

-n, --numeric-sort

сравнить в соответствии с числовым значением строки

-r, --reverse

изменить результат сравнения