Gnu coreutils è rotto?


10

Considera il seguente input per ordinare:

cat > foo <<EOM
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2
EOM

Ora prova a correre sort foo

L'output non viene ordinato quando provo questo su una qualsiasi delle mie scatole di Linux (gnu coreutils versioni 6.9-7.4). L'output viene ordinato quando eseguito sotto cygwin (gnu coretuils 8.5). Commenti?

Risposte:


18

L'ordinamento dipende dalla locale; in particolare, dipende $LC_COLLATE(eventualmente sovrascritto da $LC_ALL), ricadendo $LANGse non esiste. Il comando localeti mostrerà con quali valori stai effettivamente lavorando. Vedi man 3 strcoll, man 3 setlocaleecc

LC_COLLATE=C(o POSIXnessuna localizzazione) genera un confronto rigoroso byte per byte.

LC_COLLATE=en_US.utf8 risulta in un ordinamento alfabetico-equivalente, con punteggiatura ignorata e caratteri all'interno della stessa classe di equivalenza trattati allo stesso modo.


In effetti, export LC_COLLATE=Cfa sì che l'ordinamento si comporti come previsto
Leo Alekseyev il

3
Gli accenti non sono completamente ignorati. Stephaneordina prima Stéphane , ma Stephanieordina dopo Stéphane. éè equivalente a e(come ê, ë, ...), ma se c'è un legame, allora l'ordine tra quelli è ben definito. È lo stesso in un buon vecchio dizionario cartaceo.
Stéphane Chazelas,

Se vuoi davvero sapere tutto: unicode.org/reports/tr10
Martin Tournoij
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.