2011-08-23 11 views
6

[Questa è la riscrittura di una domanda simile ho chiesto indietro ... Ci scusiamo per la confusione!]Perché l'utilità di ordinamento UNIX ignora gli spazi iniziali senza l'opzione -b?

Sono confuso circa leader s ed il sort utilità standard. Prendere in considerazione il contenuto del myfile:

a 
b 
    a 

Esecuzione sort -t : myfile produce un risultato inatteso, almeno per me:

a 
    a 
b 

Ha senso? <space> dovrebbe arrivare prima dello a-z (come nel caso di ASCII) o dopo. Nel primo caso mi aspetterei

a 
b 
a 

mentre nel secondo caso

a 
b 
    a 

Perché, allora, vuol sort sembrano applicare l'opzione -b (ignorare che porta s) se, quando non è stato incluso ? In effetti, per sicurezza ho aggiunto l'opzione -t per avere esattamente un campo in ogni riga. (According to the POSIX standard, "Un campo comprende una sequenza massima di caratteri non separanti e, in assenza dell'opzione -t, qualsiasi separatore di campo precedente." sort myfile restituisce lo stesso output, che è anche inatteso.)

Grazie in anticipo !

risposta

9

Dipende dalle impostazioni locali. Con

LC_COLLATE=en_US.utf8 sort myfile 

ottengo il risultato inaspettato, e con

LC_COLLATE=C sort myfile 

ottengo il risultato previsto. Vedere anche bash sort unusual order. Problem with spaces?

(non so il motivo per cui sorta gestisce -b e -T come questo.)

+0

1: L'umiltà :) –

+0

@Ernest: Basta con questo! Ho rimosso l'umiltà. –

+0

Grazie! Per quanto riguarda il funzionamento di ordinamento sotto en_US.UTF-8, non riesco nemmeno a capirlo ... Il [grafico di colletion] (http://www.collation-charts.org/opensolaris/opensolaris.2008.05.en_US.UTF- 8.html) per en_US.UTF-8 non ha uno spazio tra A e B ... –

7
$ sort -t : foo 
a 
    a 
    b 
$ env LC_ALL=C sort -t: foo 
    a 
    b 
a 

Dalla pagina man: * ATTENZIONE * Il locale specificato dall'ambiente colpisce ordinamento. Impostare LC_ALL = C per ottenere l'ordinamento tradizionale che utilizza valori di byte nativi.

Problemi correlati