Linux なんかで、何かしらのコマンドの結果から重複したデータを出力して、
その結果を出現回数順に並べたいというのがまーまーよくあります。
ほぼ、イディオムみたいなもんです。(が、自分は毎日使うわけではなく忘れることがあるのでここにメモしておくことにしました)
やり方は、sort
と uniq
コマンド利用して以下の通りです
{何かしらのコマンド等で重複データを出力した結果} | sort | uniq -c | sort -nr
例えばコマンドで以下のような重複するデータを含むIPアドレス群(例えばWebサーバへのアクセス元のIPアドレス群)が得られた場合
106.73.78.92 171.193.59.149.168 209 207.46.204.192 203 59.106.108.114 105.72.77.110 120 66.249.70.136 120 66.249.70.136 137 78.46.120.35 202 66.249.69.107 107.72.78.97 106 66.249.69.121 105.72.77.110 137 78.46.120.35 129 66.249.69.65 105.72.77.110 120 66.249.70.136 117 66.249.69.131 107.72.78.97 105.72.77.110 106 66.249.69.121
これらに対して先ほどのコマンドを実行すると結果は以下になります(出現回数とIPアドレスが出現回数の降順で表示されます)
4 105.72.77.110 3 120 66.249.70.136 2 137 78.46.120.35 2 107.72.78.97 2 106 66.249.69.121 1 209 207.46.204.192 1 203 59.106.108.114 1 202 66.249.69.107 1 171.193.59.149.168 1 129 66.249.69.65 1 117 66.249.69.131 1 106.73.78.92
このぐらいのコマンドの使い方は記憶しておけよって言われそうですが・・・。