Pregunta:
¿Soy ciego o no hay otra opción como --in-place
para sort
?
Para guardar los resultados en el archivo de entrada, sed usa -i
( --in-place
).
Redirigir la salida de sort
al archivo de entrada
sort < f > f
resulta en dejarlo vacío. Si no hay --in-place
opción en el --in-place
, tal vez haya algún truco para hacer esto de manera práctica .
(Lo único que me viene a la mente:
sort < f > /tmp/f$$ ; cat /tmp/f$$ > f ; rm /tmp/f$$
Mover no es la elección correcta, porque los permisos de archivos pueden cambiar. Es por eso que sobrescribo con el contenido del archivo temporal que luego elimino).
Respuesta:
sort
tiene la opción -o
(o --output
) que toma un nombre de archivo como argumento. El programa escribe los datos en un archivo temporal, luego sobrescribe el archivo de entrada original después de que se completa la clasificación (lo que puede suceder solo después de que se hayan leído todos los datos de entrada). (Esto es esencialmente lo mismo que sed -i
).
Desde la página de información de GNU sort
:
-o OUTPUT-FILE
--output= OUTPUT-FILE
- Escriba la salida en OUTPUT-FILE en lugar de la salida estándar. Normalmente,
sort
lee todas las entradas antes de abrir OUTPUT-FILE , por lo que puede ordenar de forma segura un archivo en su lugar utilizando comandos como sort -o F F
y cat F | sort -o F
Sin embargo, sort
con --merge
( -m
) puede abrir el archivo de salida antes de leer toda la entrada, por lo que un comando como cat F | sort -m -o F - G
no es seguro, ya que sort
podría comenzar a escribir F
antes de que cat
termine de leerlo. En los sistemas más nuevos, -o
no puede aparecer después de un archivo de entrada si se establece POSIXLY_CORRECT
, por ejemplo, sort F -o F
Los scripts portátiles deben especificar -o OUTPUT-FILE
antes de cualquier archivo de entrada. y de The Open Group Base Especificaciones Edición 7 :
-o output
- 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.
Ha habido informes de que sort
puede descartar (es decir, destruir) algunos o todos sus datos si no tiene espacio en disco o no tiene cuota de disco, o si el sistema se bloquea mientras sort
escribe el archivo de salida, o si se produce algún otro error.
En resumen, para ordenar un archivo en su lugar, se puede usar lo siguiente:
sort -o filename filename