2013-04-04 12 views
6

Qualcuno può spiegare il comportamento del comando sort con il œ personaggio con un locale francese?Perché il comando sort ordina indifferentemente "œ" e "oe" nelle impostazioni locali francesi?

$ file file.txt 
file.txt: UTF-8 Unicode text, with CRLF line terminators 

$ wc -l file.txt 
4 file.txt 

$ cat file.txt 
cœz 
coez 
coe 
cœ 

$ sort file.txt 
coe 
cœ 
cœz 
coez 

$ sort -d file.txt 
cœ 
coe 
coez 
cœz 

$ env | grep -P "(LC|FR)" 
LANG=fr_FR.UTF-8 

Il fatto che "œ" è minore o maggiore di "oe" sembra casuale nel caso di una sorta regolare, mentre il personaggio è semplicemente ignorato nel caso di una sorta dizionario (sort -d).

Credo che abbia qualcosa a che fare con le regole di confronto, ma mi piacerebbe avere una certa comprensione qui.

+1

Sei sicuro che sei in un locale francese? Qual è il valore di '$ LC_ALL'? – unwind

+0

Sto usando cygwin sotto Windows. LC_ALL è vuoto. Il fatto che sia un locale francese è la mia ipotesi, come posso verificarlo? Se –

+0

"œ" è esattamente equivalente a "oe" allora i risultati possono essere spiegati con instabilità in genere. Vedi quali risultati ottieni quando viene fornita l'opzione '-s'. –

risposta

1

dizionario ordinamento può essere ignorando la legatura œ perché non è nella gamma a-zA-Z in ASCII. (Questa è una supposizione).

Poi nella versione locale francese, œ e oe risultano uguali, in modo che dovrebbe uscire in qualsiasi ordine sono andati in, che è ciò che sembra accadere a voi. Se questo è corretto, quindi se si mette questo in:

cœz 
coez 
cœm 
coem 
coep 
cœp 
coe 
cœ 

Dovreste ottenere questo:

coe 
cœ 
cœm 
coem 
coep 
cœp 
cœz 
coez 

È possibile utilizzare il -c (verificare se il file è ordinato) o -r (ordine inverso) opzioni per prendi di più.

+0

Sono d'accordo per l'ordinamento del dizionario. Ma non sono d'accordo sul perché œ e oe verrebbero paragonati come uguali, e mi chiedo perché questo comportamento sia stato scelto. Qualcuno lo sa? –

+1

@btoueg, il comportamento della funzione sort corrisponde alla convenzione preesistente, non è stato scelto dall'implementatore. Essenzialmente perché 'œ' e' oe' sono due modi diversi di scrivere la stessa cosa - è più una differenza tipografica che una differenza linguistica. – Ben

+0

In effetti, i personaggi legatura sono ordinate indifferentemente nel dizionario: http://fr.wikipedia.org/wiki/Classement_alphab%C3%A9tique#Ligatures_et_majuscules Tuttavia, si può vedere che fine i caratteri accentati sono allineati: http: // en.wikipedia.org/wiki/Alphabetical_order#Language-specific_conventions La cosa divertente è che quando si hanno duplicati, cosa che non accade in un dizionario, l'ordine diventa completamente casuale per il computer. Questo non è un comportamento che vorresti, perché è un'informazione che potresti sfruttare, ad esempio l'ortografia. –