Estoy tratando de ordenar algunos datos simples delimitados por tuberías. Sin embargo, ordenar no es realmente ordenar. Mueve mi fila de encabezado hacia abajo, pero mis dos filas que comienzan con 241 se dividen en una fila que comienza con 24.
cat sort_fail.csv
column_a|column_b|column_c
241|212|20810378
24|121|2810172
241|213|20810376
sort sort_fail.csv
241|212|20810378
24|121|2810172
241|213|20810376
column_a|column_b|column_c
Los encabezados de las columnas se están moviendo al final del archivo, por lo que ordenar los procesa claramente. Pero, los valores reales no se ordenan como era de esperar.
En este caso trabajé alrededor con
sort sort_fail.csv --field-separator='|' -k1,1
Pero, siento que eso no debería ser necesario. ¿Por qué ordenar no es ordenar?

LC_COLLATE=C sort. Dependiendo de lo que espere, también puede necesitarLC_COLLATE=C sort -t'|' -ncsvsortdesdecsvkit, que trata los valores correctamente citado.Respuestas:
sortes compatible con la configuración regional, por lo que dependiendo de su configuración LC_COLLATE (que se hereda de LANG) puede obtener resultados diferentes:Esto puede causar problemas en los scripts, ya que es posible que no sepa qué configuración regional de llamada está configurada y, por lo tanto, puede obtener resultados diferentes.
No es raro que los scripts fuercen la configuración necesaria
p.ej
Ahora lo que es interesante, aquí, es que el
|personaje se ve extraño.Pero eso se debe a que la regla predeterminada para en_US, que deriva de ISO, dice
Lo que significa que el
|personaje se ignora y el orden de clasificación sería como si el personaje no existiera.Y eso coincide con la clasificación "inesperada" que estás viendo.
Las soluciones alternativas son usar
-n(para forzar ordenamientos numéricos), o usar el separador de campo (como lo hizo) o usar laCconfiguración regional.fuente
--debugopción, que indica la clave (subrayada) utilizada para compararsortestá usando toda la línea en lugar de detenerse en los caracteres que suponemos.Lo que me irrita es que
24no se mueve de su lugar entre los dos241. El segundo campo comienza con a1. Intentando el tipo con un líder4en el segundo campo,24se mueve hacia abajo, por lo que sospecho quesortsimplemente ignora a|menos que se indique lo contrario. Intentasort -n...fuente
-n, --numeric-sort compare según el valor numérico de la cadena
Sin el -n, 210 por texto está por delante de 23, ya que va personaje mi personaje.
fuente