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.
sort --field-separator=';' --key=2,1,3
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
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é.