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」の自然ソート出力を降順または昇順で行う方法
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
比較結果を逆にする