このコマンドはなぜユニーク数に基づいてソートしないのでしょうか?

このコマンドはなぜユニーク数に基づいてソートしないのでしょうか?

ログに次のような行があります:

2015/11/02-07:55:39.735 INFO failed with ERR_AUTHORIZATION_REQUIRED.  (10.10.10.11:61618) is not a trusted source.
2015/11/02-07:55:40.515 INFO failed with ERR_AUTHORIZATION_REQUIRED.  (10.10.10.11:51836) is not a trusted source.
2015/11/02-07:55:39.735 INFO failed with ERR_AUTHORIZATION_REQUIRED.  (10.10.10.10:61615) is not a trusted source.
2015/11/02-07:55:40.515 INFO failed with ERR_AUTHORIZATION_REQUIRED.  (10.10.10.10:51876) is not a trusted source.
2015/11/02-07:55:39.735 INFO failed with ERR_AUTHORIZATION_REQUIRED.  (10.10.10.10:61614) is not a trusted source.
2015/11/02-07:55:39.735 INFO failed with ERR_AUTHORIZATION_REQUIRED.  (10.10.10.15:61614) is not a trusted source.
2015/11/02-07:55:39.735 INFO failed with ERR_AUTHORIZATION_REQUIRED.  (10.10.10.15:61618) is not a trusted source.
2015/11/02-07:55:39.735 INFO failed with ERR_AUTHORIZATION_REQUIRED.  (10.10.10.15:61613) is not a trusted source.

そこで、各一意の IP の数をソートして取得するために、次のコマンドを試しました。

grep ERR_AUTHORIZATION_REQUIRED file.log | awk '{print $6}' | cut -s -d ':' -f1 | tr -d '(' | sort | uniq -c

ただし、得られる出力は次のようになります。

3 10.10.10.10
2 10.10.10.11
3 10.10.10.15

つまり、 を適用する前に IP がソートされているように見えますuniq -c(これは コマンド を考えると当然です)。ただし、uniqsortコマンドを入れ替えると、すべての IP が の数で印刷されます1

答え1

マンページからuniq:

DESCRIPTION
     Discard all but one of successive identical lines from INPUT (or standard input), writing to OUTPUT (or standard output).

ここで重要なのは「連続」という言葉です。ストリーム内のどの時点でも重複は検索されず、直後の重複のみが検索されます。並べ替えにより、すべての重複が強制的に隣り合うようになり、重複を削除 (およびカウント) できるようになります。

関連情報