sort | uniq
existía antes sort -u
y es compatible con una gama más amplia de sistemas, aunque casi todos los sistemas modernos son compatibles -u
: es POSIX. Es principalmente un retroceso a los días en sort -u
que no existía (y las personas no tienden a cambiar sus métodos si la forma en que saben continúa funcionando, solo miren ifconfig
vs. ip
adopción).
Los dos probablemente se fusionaron porque eliminar duplicados dentro de un archivo requiere ordenación (al menos, en el caso estándar), y es un caso de uso extremadamente común. También es más rápido internamente como resultado de poder realizar ambas operaciones al mismo tiempo (y debido al hecho de que no requiere IPC entre uniq
y sort
). Especialmente si el archivo es grande, sort -u
probablemente usará menos archivos intermedios para ordenar los datos.
En mi sistema constantemente obtengo 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
Tampoco oculta el código de retorno de sort
, que puede ser importante (en los shells modernos hay formas de obtener esto, por ejemplo, bash
la $PIPESTATUS
matriz, pero esto no siempre fue cierto).