¿Cómo ordenar un archivo in situ?
Cuando usamos el sort file
comando, 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?
Puede utilizar la -o
opción --output=FILE
de 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.
El sort
comando 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 file
con la salida ordenada. El -o
modificador, 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 sort
sin el -o
interruptor ( Luis me asegura que existen), puedes lograr una edición "in situ" de la forma estándar:
sort file > tmp && mv tmp file
sort file | sponge file
Esto está en el siguiente paquete de Fedora:
moreutils : Additional unix utilities
Repo : fedora
Matched from:
Filename : /usr/bin/sponge