2012-02-02 15 views

Respuesta

12

Probar:

sort -o file.txt file.txt 

Ver http://ss64.com/bash/sort.html

`-o OUTPUT-FILE' 
    Write output to OUTPUT-FILE instead of standard output. If 
    OUTPUT-FILE is one of the input files, `sort' copies it to a 
    temporary file before sorting and writing the output to 
    OUTPUT-FILE. 
+0

+1 ;-) Algunos detalles: 'sort' hará el' mv foo.txt file.txt' sí mismo. – olibre

+0

¡Ah, allí vamos!Vi esa bandera en el hombre, pero no noté la información adicional. EDITAR: Impar La información adicional no está en mis páginas man. ¿Por qué la página man que está enlazando es más completa? – Nagel

+1

@Nagel - No lo sé. Fue solo el primer golpe en Google cuando busqué 'man sort'. La página man de Berkeley tiene información similar, pero un poco más breve. –

1

La filosofía de herramientas clásicas como Unix sort incluye que se puede construir una tubería con ellos. Cada pequeña herramienta lee desde STDIN y escribe en STDOUT. De esta manera, la siguiente pequeña herramienta en la tubería puede leer la salida de la primera como entrada y actuar sobre ella.

Así que diría que esto es un error y no una característica.

Lea también sobre P ipes, Redirection, and Filters en el muy buen libro de ESR.

+0

Parece un buen libro. – Nagel

0

¡Sí, necesitas un segundo archivo! El comando

sort file.txt > file.txt 

tendría bash para configurar la redirección de stout antes de que comience la ejecución de sort. Esta es una forma segura de vencer tu archivo de entrada.

Si desea ordenar muchos archivos a tratar:

cat *.txt | sort > result.txt 
+0

Lo sospechaba mucho. Simplemente se sentía poco elegante de alguna manera: P ¡Gracias! – Nagel

+0

-1 Hay una opción '-o' que permite la salida al mismo archivo –

+0

@AndrewCooper: lo sé, pero el caso anterior usó la redirección de salida, ¡en este caso necesita el archivo adicional! ¡Incluso el -o usa un archivo temporal, que no tiene que preocuparse por la creación, no significa que no está allí! – Mithrandir

1

Debido a que usted está escribiendo de nuevo al mismo archivo que' Siempre terminaré con un problema de redirección abriendo el archivo de salida antes de que se complete la clasificación loadi ng el original. Entonces sí, necesitas usar un archivo separado.

Ahora bien, una vez dicho esto, hay formas de almacenar en búfer todo el archivo en el flujo de canal primero, pero en general no le gustaría hacer eso, aunque es posible si escribe algo para hacerlo. Pero estaría insertando herramientas especiales al principio y al final para hacer el almacenamiento en búfer. Bash, sin embargo, abrirá el archivo de salida demasiado pronto si lo usa es > redirigir.

0

si se trata de ordenar registros de longitud fija desde un solo archivo, entonces el algoritmo de ordenamiento puede intercambiar registros dentro del archivo. Hay algunos algoritmos disponibles disponibles. Su elección dependería de la cantidad de propiedades de aleatoriedad del archivo. Generalmente, quicksort tiende a intercambiar la menor cantidad de registros y suele ser el tipo que se completa primero, en comparación con los algoritmos de clasificación de otros.

Cuestiones relacionadas