2010-04-22 15 views
6

cuando intenta ordenar 'entrada' el siguiente archivo de texto:resultado inesperado de tipo GNU

test1 3 
test3 2 
test 4 

con el comando

sort input 

la salida es exactamente la entrada. Aquí está la salida de

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 

Es sólo un archivo separado pestaña con dos columnas. Cuando hago

sort -k 2 

La salida cambia a

test3 2 
test1 3 
test 4 

que es lo que se espera. Pero si lo hago

sort -k 1 

nada cambia con respecto a la entrada, mientras que se puede esperar 'prueba' para ordenar antes 'test1'. Por último, si lo hago

cat input | cut -f 1 | sort 

consigo

test 
test1 
test3 

como se esperaba. ¿Hay una explicación lógica para esto? ¿Qué se supone que debe hacer la clase de forma predeterminada, algo así como:

sort -k 1 

?

Mi versión de ordenar:

sort (GNU coreutils) 7.4 
+1

Incluso con un algoritmo de ordenación natural, la entrada (como se muestra) ya está ordenada. –

Respuesta

7

Desde las páginas de manual:

* ADVERTENCIA * La configuración regional especificada por el medio ambiente afecta tipo orden. Establezca LC_ALL = C para obtener el orden de clasificación tradicional que utiliza valores de bytes nativos .

por lo que parece exportación LC_ALL = C debe ayudar a

+0

El género GNU con LC_ALL = C produce la respuesta tradicional, que es lo que 'sort' en Solaris produce de todos modos. Cambie la línea 'test3' a 'Test3' y obtendrá más diferencias. Las respuestas de GNU son consistentes con el orden de '' ls' '. Sin embargo, es sorprendente. –

+0

Gracias, para mí, también, produce el resultado esperado. Sin embargo, en mi configuración regional predeterminada en_US.UTF-8, tanto la pestaña como el espacio también se ordenan antes de los caracteres alhpanumeric. Si el género está haciendo un tipo lexicográfico en toda la línea, sigue siendo un poco sorprendente para mí también. – user323338

+3

+1 Esto funciona. ¿¿¿Pero por qué??? –

Cuestiones relacionadas