Ordenar archivo CSV por prioridad de columna usando el comando "ordenar"


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 "select", el "order by" sería el siguiente: order by column2, column1, column3 - 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.

Author: Martin Thoma, 2012-02-27

4 answers

sort --field-separator=';' --key=2,1,3
 109
Author: Charlie Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-27 19:39:15

La respuesta de Charlie anterior no funcionó para mí en Cygwin (sort version 2.0, GNU textutils), lo siguiente lo hizo:

sort -t"," -k2 -k1 -k1
 20
Author: Samuel Kerrien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-01 16:04:41

Supongamos que tiene otra fila 3;10;3 en su archivo unsorted.csv. Entonces supongo que esperas un resultado ordenado numéricamente:

2;1;3
3;1;2
1;2;3
3;2;1
1;3;2
2;3;1
3;10;3

Y no uno ordenado alfabéticamente:

2;1;3
3;1;2
3;10;3
1;2;3
3;2;1
1;3;2
2;3;1

Para obtener eso, tienes que usar -n:

sort --field-separator=';' -n -k 2,2 -k 1,1 -k 3,3 unsorted.csv

Vale la pena mencionar que 2,2 tiene que ser utilizado. Si solo se usa 2, entonces sort toma la cadena desde el principio del campo 2 hasta el final. 2,2 se asegura de que solo se use el campo 2.

 17
Author: Martin Thoma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-05 15:56:19

..y si alguien siguió la solución 'sort' pero ahora quiere obtener más que la única entrada única por línea (es decir, el número X superior de entradas únicas), una vez que haya ordenado el archivo usando 'sort', puede usar una pequeña aplicación que creé aquí:

Https://github.com/danieliversen/MiscStuff/blob/master/scripts/findTopUniques.java

 -3
Author: Daniel Iversen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-25 10:29:33