如何对“uniq -c”的自然排序输出进行升序/降序处理?-unix

38

如何对uniq -c的输出进行自然排序?

当计数小于10时,uniq -c | sort的输出看起来很好:

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

但是当计数大于10,甚至达到千百级别时,排序就会出现问题,因为它是按字符串而不是自然整数排序:

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

如何对“uniq -c”的自然排序输出进行升序/降序排列?

1个回答

55

sort命令中使用-n,这样可以按数字排序。同时,-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

反转比较结果


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接