comando sort en unix con ordenamiento numérico

10

Tengo el archivo 1:

"$lvl=57"
"$lvl=20"
"$lvl=48"
"$lvl=17"
"$lvl=58"

File2 quiero:

"$lvl=17"
"$lvl=20"
"$lvl=48"
"$lvl=57"
"$lvl=58"

Básicamente, numéricamente tipo de archivo1.

yisha
fuente
Cuando ejecuto un Unix simple sorten su File1, sin opciones, obtengo su File2. ¿Qué haces diferente? ¿Qué estás dejando fuera de esta pregunta?
Scott

Respuestas:

17

Me gusta -V --version-sort: se comporta muy bien para muchas situaciones mezclando cadenas y números

sort -V

Yo uso esta opción muy a menudo ...

En alguna dirección, ls -vpara ordenar por versión ls.

JJoao
fuente
10

Debe indicar sort -nque ordene la parte después de =:

sort -t = -k 2n
Stéphane Chazelas
fuente
Hace poco estuve mirando esto ^^. Pero una más P. ¿Qué hacer -k2n? ¿Se relaciona eso con la ordenación numérica? gracias.
αғsнιη
2
@KasiyA -kdefine una clave de clasificación. Vea la página del manual para más detalles. -k2ndefine una clave de clasificación que comienza en el segundo campo y termina al final de la línea y la convierte en una clave de clasificación numérica.
Stéphane Chazelas
0

use sort:

sort -n file1 > file2

-n, --numeric-sort
compare según el valor numérico de la cadena

 sort -g file1 > file 2

-g, --general-numeric-sort

Adicto al alcohol
fuente
3
No, todas esas líneas tienen la misma clasificación sort -nya que no comienzan con un número. La razón por la que los ordena es el último recurso de línea completa (léxico, no numérico) realizado para líneas con la misma clasificación. Eso ordenaría "$lvl=17"antes "$lvl=2".
Stéphane Chazelas
@ StéphaneChazelas gracias por señalar.
Hackaholic
Parafraseando, -ny -gson redundantes aquí ya que la entrada no es numérica. Entonces, esta respuesta es engañosa, de ahí el voto negativo (también tenga en cuenta que -gy las opciones largas son específicas de GNU).
Stéphane Chazelas
pero -g es una buena clasificación numérica general
Hackaholic
Eso sigue siendo para ordenar valores numéricos, la diferencia -nes que no está limitado a enteros decimales. Eso todavía se ordenaría "$lvl=17"antes "$lvl=2"como parte de la clasificación de último recurso.
Stéphane Chazelas
0

Descubrí que, solo corres sort -h, funcionará. Lo llaman --human-numberic-sort.

sort -h file1 > file2
vincent pham
fuente
-1

sort -nes lo que quieres usar. Se ordena a medida que ordenamos los números.sort -k 2 -n file1

Cosmo
fuente
2
Pero el OP quiere ordenar en orden ascendente, que es el valor predeterminado. ¿Por qué estás sugiriendo el orden inverso?
G-Man dice 'Reincorporar a Monica' el
lo anterior es correcto cuando los campos están separados por tabulaciones o espacios y no funcionarán en el caso de OP.
αғsнιη