bash – ¿Cuál es la diferencia entre "sort -u" y "sort | uniq"?

Pregunta:

En todos los lugares donde veo a alguien que necesita obtener una lista ordenada y única, siempre lo canalizan para sort | uniq . Nunca he visto ningún ejemplo en el que alguien use sort -u lugar. ¿Por qué no? ¿Cuál es la diferencia y por qué es mejor usar uniq que la bandera única para ordenar?

Respuesta:

sort | uniq existía antes que sort -u , y es compatible con una gama más amplia de sistemas, aunque casi todos los sistemas modernos admiten -u : es POSIX. Es sobre todo un retroceso a los días en que no existía sort -u (y la gente no tiende a cambiar sus métodos si la forma que conocen sigue funcionando, basta con mirar ifconfig frente a la adopción de ip ).

Los dos probablemente se fusionaron porque eliminar duplicados dentro de un archivo requiere clasificación (al menos, en el caso estándar), y es un caso de uso extremadamente común de clasificación. También es más rápido internamente como resultado de poder hacer 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 siempre 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

Asimismo, no enmascarar el código de retorno de la sort , que puede ser importante (en conchas modernas existen maneras de conseguir esto, por ejemplo, bash 's $PIPESTATUS matriz, pero esto no siempre es cierto).

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım