2010-04-22 9 views
6

quando cerco di ordinare 'input' il seguente file di testo:risultato inaspettato da Sort gnu

test1 3 
test3 2 
test 4 

con il comando

sort input 

l'uscita è esattamente l'input. Ecco l'output di

od -bc input 

:

0000000 164 145 163 164 061 011 063 012 164 145 163 164 063 011 062 012 
      t e s t 1 \t 3 \n t e s t 3 \t 2 \n 
0000020 164 145 163 164 011 064 012 
      t e s t \t 4 \n 
0000027 

E 'solo un file separato scheda con due colonne. Quando faccio

sort -k 2 

L'uscita di

test3 2 
test1 3 
test 4 

che è quello che mi aspetterei. Ma se faccio

sort -k 1 

non cambia nulla rispetto all'ingresso, mentre io aspetterei 'test' per ordinare prima 'test1'. Infine, se faccio

cat input | cut -f 1 | sort 

ottengo

test 
test1 
test3 

come previsto. C'è una spiegazione logica per questo? Che cosa è esattamente ordinamento da fare per impostazione predefinita, ad esempio:

sort -k 1 

?

La mia versione di sorta:

sort (GNU coreutils) 7.4 
+1

Anche con un algoritmo di ordinamento naturale, l'ingresso (come mostrato) è già ordinato. –

risposta

7

Dalle pagine man:

* ATTENZIONE * Il locale specificato dall'ambiente colpisce sorta ordine. Impostare LC_ALL = C per ottenere l'ordinamento tradizionale che utilizza i valori di byte nativi .

così sembra export LC_ALL = C deve aiutare

+0

Ordinamento GNU con LC_ALL = C produce la risposta tradizionale - che è ciò che produce "sort" su Solaris in ogni caso. Cambia la linea 'test3' in 'Test3' e ottieni più differenze. Le risposte GNU sono coerenti con l'ordinamento di "ls". È sorprendente, però. –

+0

Grazie anche a me, produce il risultato atteso. Tuttavia, nella mia localizzazione predefinita en_US.UTF-8, sia tab che spazio si ordinano prima dei caratteri alfanumerici. Se sortisce solo un tipo lessicografico sull'intera linea, rimane un po 'sorprendente anche per me. – user323338

+3

+1 Funziona. Ma perché??? –