「sort -u」と「sort | uniq」の違いは何ですか?

「sort -u」と「sort | uniq」の違いは何ですか?

ソートされた一意のリストを取得する必要がある人を見るたびに、彼らは常にこれをsort | uniq。私はそれが使用される例を見たことがありませんsort -u。なぜできないの?違いは何ですか?ソート時にユニークフラグよりuniqを使用する方が良いのはなぜですか?

ベストアンサー1

sort | uniq以前にもあり、sort -uより広い範囲のシステムと互換性がありますが、ほとんどすべての最新システムがこれをサポートしています。-uまさにPOSIXです。これはほとんど存在しなかった時代の後退です(人々は、既知の方法が機能し続けることがわかっている場合は、自分の方法を変える傾向がないでしょう。養子縁組と比較してみてくださいsort -u)。ifconfigip

ファイルから重複エントリを削除するには、ソート(少なくとも標準ケースでは)が必要で、ソートのための非常に一般的なユースケースなので、2つはマージされる可能性が高いです。両方のタスクを同時に実行する能力のため(そしてIPCは必要ありません(プロセス間通信)間uniqsort。特に、ファイルが大きい場合、照合sort -uに使用される中間ファイルの数が少なくなる可能性があります。

私のシステムでは、次の結果が引き続き表示されます。

$ dd if=/dev/urandom of=/dev/shm/file bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 8.95208 s, 11.7 MB/s
$ time sort -u /dev/shm/file >/dev/null

real        0m0.500s
user        0m0.767s
sys         0m0.167s
$ time sort /dev/shm/file | uniq >/dev/null

real        0m0.772s
user        0m1.137s
sys         0m0.273s

また、重要な可能性のある戻りコードをマスクしません(最新のシェルには、配列のようにsortこれを取得するためのいくつかの方法がありますが、これは常に正しいとは限りません)。bash$PIPESTATUS

おすすめ記事