sort | uniq
existia antes sort -u
e é compatível com uma ampla gama de sistemas, embora quase todos os sistemas modernos sejam compatíveis -u
- é o POSIX. É principalmente um retrocesso para os dias em sort -u
que não existia (e as pessoas não tendem a mudar seus métodos se a maneira que eles sabem continuar a funcionar, basta olhar ifconfig
contra a ip
adoção).
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 da classificação. Também é mais rápido internamente como resultado de poder realizar 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 mascarar o código de retorno sort
, que pode ser importante (em conchas modernas existem maneiras de conseguir isso, por exemplo, bash
da $PIPESTATUS
matriz, mas isso nem sempre era verdade).