sort | uniq
existia antes de sort -u
e é compatível com uma ampla gama de sistemas, embora quase todos os sistemas modernos suportem -u
- é POSIX. É principalmente um retrocesso para os dias em que sort -u
não existia (e as pessoas não tendem a mudar seus métodos se a maneira como elas sabem continuar a funcionar, basta olhar para ifconfig
vs. ip
adoption).
Os dois provavelmente foram mesclados porque a remoção de duplicatas em um arquivo requer classificação (pelo menos, no caso padrão) e é um caso de uso extremamente comum de classificação. Ele também é mais rápido internamente como resultado de poder executar as duas operações ao mesmo tempo (e devido ao fato de não exigir IPC entre uniq
e sort
). Especialmente se o arquivo for grande, sort -u
provavelmente usará menos arquivos intermediários para classificar os dados.
No meu sistema, eu sempre obtenho resultados como este:
$ 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
Ele também não mascara o código de retorno de sort
, o que pode ser importante (nos shells modernos existem maneiras de obter isso, por exemplo, bash
' $PIPESTATUS
array, mas isso não foi sempre verdade).