web-dev-qa-db-fra.com

Trier les fichiers CSV par priorité de colonne à l'aide de la commande "trier"

J'ai un fichier csv, et je voudrais le trier par priorité de colonne, comme "commander par". Par exemple:

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

Si cette situation résultait d'un "select", "order by" serait le suivant: order by column2, column1, column3 - le résultat serait:

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

Je voudrais savoir comment obtenir ce même résultat en utilisant la commande "sort" sur Unix.

78
Rafael Orágio
sort --field-separator=';' --key=2,1,3
128
Charlie Martin

La réponse de Charlie ci-dessus n'a pas fonctionné pour moi sur Cygwin (trier la version 2.0, GNU textutils)], ce qui suit a fonctionné:

sort -t"," -k2 -k1 -k1
24
Samuel Kerrien

Supposons que vous ayez une autre rangée 3;10;3 dans votre unsorted.csv fichier. Ensuite, je suppose que vous attendez un résultat trié numériquement:

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

et non un tri alphabétique:

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

Pour obtenir cela, vous devez utiliser -n:

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

Il est important de mentionner que 2,2 doit être utilisé. Si seulement 2 est utilisé, puis sort prend la chaîne du début du champ 2 à la fin. 2,2 s'assure que seul le champ 2 est utilisé.

22
Martin Thoma