2011-09-14 8 views
30

Tengo un archivo csv con 7 campos de datos. Quiero ordenar el séptimo campo en orden numérico inverso (los valores más pequeños primero). El séptimo campo de datos es el siguiente:Clasificación UNIX con valores exponenciales?

0.498469643137 
1 
6.98112003175e-10 
9.11278069581e-06 

he tratado de usar la herramienta de tipo UNIX como esto:

$ sort -t"," -n -k -r 7 <my_file> 

El problema que estoy teniendo es que una especie no reconoce la forma exponencial. Por ejemplo, sort piensa que 6.98112003175e-10 es más grande que 1. ¿Cómo puedo usar ordenar para ordenar una columna csv, pero reconozco la notación científica? Gracias de antemano por la ayuda.

+4

Pruebe el indicador '-g'. –

Respuesta

50

ordenar con la opción '-g' debe hacer el truco para usted. opción -g indica 'utilizar valor numérico genérico' para clasificar

+0

Gracias, leí la página del manual, pero no vi nada sobre la bandera -g. Esto hizo exactamente lo que estaba buscando. – drbunsen

5

Tenga en cuenta que la configuración regional puede asumir otro delimitador: Por ejemplo, en ruso localización ',' carácter delimita partes del número en lugar de '.'. En este caso, debe tener en cuenta la variable LANG.

En mi caso, LANG se configuró en ru_RU.KOI8-R y entonces sort -g me dio un resultado erróneo.

+1

Tuve este problema también. Aquí encontré una solución https://askubuntu.com/questions/724338/how-to-set-lc-numeric-to-english-permanently – psmith

0

Por lo tanto, solo para dar un ejemplo para aquellos que no saben cómo usarlo: en lugar de "-n" se usa "-g". l = 1,0.3,6.01e-10

sort -t$',' -n example.txt

0.3 1 6.01e-10

sort -t$',' -g example.txt

6.01e-10 0.3 1

+0

¿Podrías dar más detalles? – Kmeixner

+0

¿cómo es eso? -g es para 'usar valor numérico genérico'. Por favor, lea la publicación anterior sobre por qué usar -g. Si todavía tiene preguntas, definitivamente intentaré responderlas. – amc

Cuestiones relacionadas