Tengo un archivo separado por comas que se ve así:
100,00869184
6492,8361
1234,31
200,04071
Quiero usar sort
para ordenar este archivo numéricamente solo por la primera columna .
Resultado deseado:
100,00869184
200,04071
1234,31
6492,8361
¿Cómo consigo esto usando sort? Parece que las comas están siendo tratadas como miles de separadores en lugar de delimitadores, incluso cuando los llamo así.
Ambos sort -t',' -n
y sort -t',' -nk1'
dame esto:
1234,31
200,04071
6492,8361
100,00869184
Ordenar por defecto (sin parámetros) o usar sort -t','
me da esto:
100,00869184
1234,31
200,04071
6492,8361
Y ordenar por un número sort -n
me da esto:
1234,31
200,04071
6492,8361
100,00869184
¿Cómo puedo usar la ordenación para lograr el resultado deseado?
Editado para agregar: Esto es para una operación única para crear una lista ordenada de aproximadamente 7 millones de líneas, por lo que las soluciones alternativas u otros métodos poco ortodoxos son perfectamente aceptables.
-t
opción de tener un espacio entre-t
el personaje y el personajeRespuestas:
Sin duda, esta es una solución sucia, pero descubrí una forma de hacerlo gracias al consejo de @ slhck sobre los entornos locales. Si aparece una mejor respuesta que sería más útil para los demás, ciertamente la aceptaré, ya que esto solo funciona para mi problema específico.
Establecí la configuración regional en español (boliviano) para que las comas se trataran como puntos decimales, luego la clasificación numérica estándar funcionó.
fuente
GNU
sort
hace esto por defecto:Versión:
Sin embargo, hay una advertencia: si su clasificación no funciona como se esperaba, entonces
locale
probablemente esté configurado en algo diferente aC
. ¿Por qué es esto?locale
define la clasificación e interpretación de letras, números, caracteres decimales, etc.Para verificar esto, solo ingrese
locale
en una Terminal. ¿EstáLC_NUMERIC
configurado paraen_US.UTF-8
, tal vez? Esto explicaría el orden de clasificación incorrecto. Ajústelo de nuevo aC
:Luego, intente su
sort
comando nuevamente. Si desea establecer su globallocale
aC
, haga esto con:fuente
locale
problema. Pero, ¿qué haysort --version
para ti, en realidad?--
Los comandos tampoco me han funcionado en el pasado. Revisé la página del manual y no hay una versión explícitamente llamada, pero sí menciona "HP-UX 11i Versión 2: agosto de 2003" si eso ayuda. Mi LC_NUMERIC está configurado en "C".,
como separador decimal. Sin embargo, nunca he usado HP-UX.Intente agregar la
-g
opción que se supone que realiza la ordenación numérica.Tratar:
fuente
-n
ordenación numérica? -g me da una opción ilegal.-g
es lageneral-numeric-sort
opción y debería estar disponible en cualquier versión reciente desort
. @dpatcheryReemplace el delímetro:
- debería ayudarte.
fuente