sortproporciona dos tipos de ordenación numérica. Esto es de la página del manual:
-g, --general-numeric-sort
compare according to general numerical value
-n, --numeric-sort
compare according to string numerical value
¿Cual es la diferencia?

sortno es lamanpágina sino lainfopágina (info sort).Respuestas:
La ordenación numérica general compara los números como flotantes, esto permite la notación científica, por ejemplo, 1.234E10 pero es más lento y está sujeto a errores de redondeo (1.2345678 podría venir después de 1.2345679), la ordenación numérica es solo una ordenación alfabética regular que sabe que 10 viene después de 9.
Ver http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html
fuente
-k3.2no-k3.2g, está ordenandoR10antesR2. El tipo es lexicográfico, no numérico. Espero que trate el campo desde el segundo carácter en adelante como un número.sortespecificaciones clave. son verdaderamente bizantinos - el corto es: el espacios en blanco que preceden al campo se consideran parte del campo , por lo que char. El índice 1 apunta al (primer) espacio en blanco que precede al campo, no al primer carácter real del campo. Sufijo el char. index withbpara solucionar este problema, es decir:-k 3.2bn,3(tenga en cuenta que la opción global no funciona en este caso). También tenga en cuenta lo agregado , que garantiza que solo se use el tercer campo; sin ese segundo índice de campo, se usa el resto de la línea completa .-b,3Debe tener cuidado con su localidad. Por ejemplo, podría intentar ordenar un número flotante (como 2.2) mientras que su configuración regional podría esperar el uso de una coma (como 2,2).
Como se informó en este foro , es posible que obtenga resultados incorrectos al utilizar los indicadores -no -g.
En mi caso uso:
para ordenar la sexta columna que contiene:
para obtener
fuente
-nreconocer la coma como un separador de miles: "1,000" se trata de la misma manera que "1".sortusa la lógica del prefijo más largo : se usa la parte más larga de la línea / tecla que reconoce como un número; en una configuración regional que utiliza.como carácter de base, dejará de leer en,.LC_ALL=Checho, es la opción más sólida ; sin embargo, siLC_ALLno se establece la apuesta,LANG=Ctambién funcionará.LANG=C sort -k 6,6n filees más simple y también localiza el efecto de establecer la variable de entornoLANGen el comando específico.Además de la respuesta aceptada que menciona
-gpermitir la notación científica , quiero mostrar la parte que más probablemente causa un comportamiento indeseable.Con
-g:Mire las
zootres cosas importantes aquí:La línea comienza con
NAN(por ejemplo,Nanaynani lol) o-INF(un guión, no--INF) se mueve al final pero antes de los dígitos. Mientras seINFmueve al último dígito posterior porque significa infinito .Los
NAN,INFy no-INFdistinguen entre mayúsculas y minúsculas .Las líneas siempre se ignoran los espacios en blanco a cada lado de
NAN,INF,-INF(sin tener en cuentaLC_CTYPE). Otros alfabéticos pueden ignorar los espacios en blanco de cualquier lado dependiendo de la configuración regionalLC_COLLATE(por ejemplo,LC_COLLATE=fr_FR.UTF-8ignorar peroLC_COLLATE=us_EN.UTF-8no ignorar).Entonces, si está ordenando alfanuméricos arbitrarios , probablemente no lo desee
-g. Si realmente necesita una comparación de notación científica-g, probablemente desee extraer datos alfabéticos y numéricos y hacer la comparación por separado .Si solo necesita una
1, -1clasificación de números ordinarios (por ejemplo ), y cree que0x/E/+ sortingno es importante, use lo-nsuficiente:O
-gbien-n, tenga en cuenta el efecto local . Es posible que desee especificarLC_NUMERICcomous_EN.UTF-8para evitar la clasificación de fr_FR.UTF-8-con un número flotante fallido :Con
LC_NUMERIC=en_US.UTF-8:O
LC_NUMERIC=us_EN.UTF-8para agrupar+|-|spaceconalpha:Probablemente desee especificar
localeal usarsortsi desea escribir un script portátil.fuente