Tengo un archivo csv y me gustaría ordenarlo por prioridad de columna, como "ordenar por". Por ejemplo:
3;1;2
1;3;2
1;2;3
2;3;1
2;1;3
3;2;1
Si esta situación fuera el resultado de un "seleccionar", el "ordenar por" sería el siguiente: ordenar por columna2, columna1, columna3 - el resultado sería:
2;1;3
3;1;2
1;2;3
3;2;1
1;3;2
2;3;1
Me gustaría saber cómo obtener este mismo resultado usando el comando "sort" en Unix.
unix
sorting
csv
sql-order-by
Rafael Orágio
fuente
fuente

Respuestas:
fuente
-nopción que "comparará según el valor numérico de la cadena" o la-gopción que "comparará según el valor numérico general". Una comparación de cadenas de valores numéricos obtendrá los números ordenados como1,10,2,20. Al menos esas son opciones disponibles en mi versión de sort en CentOS. Debe verificar con la página de manual cuáles son las opciones correctas en su versión de sort.sort: stray character in field spec: invalid field specification ‘2,1,3’sort --field-separator=',' -r -k3 -k1 -k2 source.csv > target.csvfuncionó para mí.sort --field-separator=';' --key={2,1,3}. Esto funcionóGNU coreutils 8.4desde abril de 2016--key={2,1,3}usa la expansión deSuponga que tiene otra fila
3;10;3en suunsorted.csvarchivo. Entonces supongo que espera un resultado ordenado numéricamente:y no ordenado alfabéticamente:
Para obtener eso, debes usar
-n:Vale la pena mencionar que
2,2debe usarse. Si solo2se usa,sorttoma la cadena desde el principio del campo 2 hasta el final.2,2se asegura de que solo2se utilice el campo .fuente
3;10;3,3:10:5,3:10;2,3;10;3en ese orden en el archivo de origen, y cuando se utiliza solo-k 2,2aparece para ordenar en la columna 2 y 3. La página del manual dice"The -k option may be specified multiple times, in which case subsequent keys are compared when earlier keys compare equal.". En mi caso, la clave anterior (valor = 10) se comparó igual, sin embargo, no especifiqué-kvarias veces. No estoy seguro de si se trata de un comportamiento fiable o relacionado con mi sistema (mac). Sin embargo, en última instancia, no importa, siempre que la clasificación principal sea correcta.-sun tipo estable que ignora las claves iguales, que aparentemente es más rápido según el hombre.La respuesta de Charlie anterior no funcionó para mí en Cygwin (sort versión 2.0, GNU textutils), lo siguiente sí:
fuente
sort --field-separator=';' -k2 -k1 -k3 test.csv.. y si alguien siguió la solución 'ordenar' pero ahora quiere obtener más que la entrada única por línea (es decir, el número X superior de entradas únicas), una vez que haya ordenado el archivo usando 'ordenar', puede usar una pequeña aplicación que creé aquí:
https://github.com/danieliversen/MiscStuff/blob/master/scripts/findTopUniques.java
fuente
cat unsorted-file | sort | uniq | head -X- cuándoXes el número de primeras filas que desea generar.uniqen el orden de las tuberías, entre elsorty elhead, que da unicidad a todas las filas ordenadas justo antes de la extracción de las filas superiores.