2012-02-02 15 views

risposta

12

Prova:

sort -o file.txt file.txt 

Vedi 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 ;-) Alcuni dettagli: 'sort' farà il' mv foo.txt file.txt' stesso. – olibre

+0

Ah, eccoci!Ho visto quella bandiera nell'uomo, ma non ho notato le informazioni aggiuntive. EDIT: dispari. Le informazioni aggiuntive non sono nelle mie pagine man. Perché la pagina man che stai collegando è più completa? – Nagel

+1

@Nagel - Non so. È stato solo il primo hit su Google quando ho cercato "man sort". La pagina man di Berkeley ha informazioni simili, ma un po 'più brevi. –

1

La filosofia di strumenti classici Unix come sort comprende che si può costruire un tubo con loro. Ogni piccolo strumento legge da STDIN e scrive su STDOUT. In questo modo il prossimo piccolo strumento lungo il tubo può leggere l'output del primo come input e agire su di esso.

Quindi direi che si tratta di un bug e non di una funzionalità.

Si prega di leggere anche su P ipes, Redirection, and Filters nel bel libro di ESR.

+0

Sembra un buon libro. – Nagel

0

Sì, è necessario un secondo file! Il comando

sort file.txt > file.txt 

avrebbe bash per impostare il reindirizzamento dei stout prima che inizia l'esecuzione sort. Questo è un modo sicuro per aggirare il tuo file di input.

Se si desidera ordinare molti file provare:

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

Ho sospettato tanto. Sembrava poco elegante in qualche modo: P Grazie! – Nagel

+0

-1 C'è un'opzione '-o' che consente l'output sullo stesso file –

+0

@AndrewCooper: lo so, ma il caso precedente ha utilizzato il reindirizzamento dell'output, in questo caso è necessario il file aggiuntivo! Anche -o usa un file temporaneo, che non devi preoccuparti della creazione non significa che non ci sia! – Mithrandir

1

Perché si sta scrivendo di nuovo allo stesso file che si' Finiremo sempre con un problema con il reindirizzamento che apre il file di output prima che sort venga eseguito loadi ng l'originale. Quindi sì, è necessario utilizzare un file separato.

Ora, detto questo, ci sono modi per bufferizzare l'intero file nel pipe stream, ma in generale non si vorrebbe farlo, anche se è possibile se si scrive qualcosa per farlo. Ma dovresti inserire strumenti speciali all'inizio e alla fine per fare il buffering. Bash, tuttavia, aprirà il file di output troppo presto se si utilizza il reindirizzamento >.

0

se si ha a che fare ordinando record di lunghezza fissa da un singolo file, allora l'algoritmo di ordinamento può scambiare i record all'interno del file. Sono disponibili alcuni algoritmi disponibili. La tua scelta dipenderà dalla quantità delle proprietà di casualità del file. Generalmente, quicksort tende a scambiare il minor numero di record e di solito è l'ordinamento che viene completato per primo, se confrontato con gli algoritmi otherorting.

Problemi correlati