web-dev-qa-db-ja.com

「uniq -c」の自然ソート出力を降順/昇順で行うにはどうすればよいですか? -UNIX

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」の自然ソート出力を降順または昇順で行う方法

29
alvas

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

比較結果を逆にする

36
fedorqui