¿Cómo ordenar un archivo in situ?

Resuelto Ali Sajid asked hace 9 años • 7 respuestas

Cuando usamos el sort filecomando, el archivo muestra su contenido de forma ordenada. ¿Qué pasa si no quiero obtener ningún resultado en la salida estándar, sino en el archivo de entrada?

Ali Sajid avatar Mar 25 '15 05:03 Ali Sajid
Aceptado

Puede utilizar la -oopción --output=FILEde ordenar para indicar el mismo archivo de entrada y salida:

sort -o file file

Sin repetir el nombre del archivo (con expansión de llave bash )

sort -o file{,}

⚠️ Nota importante: un error común es intentar redirigir la salida al mismo archivo de entrada (p. ej. sort file > file). Esto no funciona ya que el shell está realizando las redirecciones (no el programa sort(1) ) y el archivo de entrada (que también es la salida) se borrará justo antes de darle al programa sort(1) la oportunidad de leerlo.

Sylvain Bugat avatar Mar 24 '2015 22:03 Sylvain Bugat

El sortcomando imprime el resultado de la operación de clasificación en la salida estándar de forma predeterminada. Para lograr una clasificación "in situ", puede hacer esto:

sort -o file file

Esto sobrescribe la entrada filecon la salida ordenada. El -omodificador, utilizado para especificar una salida, está definido por POSIX , por lo que debería estar disponible en todas las versiones de sort:

-o Especifique el nombre de un archivo de salida que se utilizará en lugar de la salida estándar. Este archivo puede ser el mismo que uno de los archivos de entrada.

Si tienes la mala suerte de tener una versión sortsin el -ointerruptor ( Luis me asegura que existen), puedes lograr una edición "in situ" de la forma estándar:

sort file > tmp && mv tmp file
Tom Fenech avatar Mar 24 '2015 22:03 Tom Fenech
sort file | sponge file

Esto está en el siguiente paquete de Fedora:

moreutils : Additional unix utilities
Repo        : fedora
Matched from:
Filename    : /usr/bin/sponge
SilverlightFox avatar Apr 04 '2019 13:04 SilverlightFox