J'utilise le tri Unix pour trier un fichier délimité par des virgules avec plusieurs colonnes. Jusqu'à présent, cela a parfaitement fonctionné pour trier les données soit numériquement soit par ordre alphabétique:
Exemple de fichier avant tout tri:
C,United States,WA,Tacoma,f,1
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
A,United States,NY,New York,f,1
Triez le fichier: $ sort -t ',' -k 2,2 -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Résultat trié:
A,Bahamas,Bahamas,Nassau,f,2
A,Canada,QC,Montreal,f,2
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
Voici le problème: je veux trier la colonne 2 en fonction d'un tri personnalisé, ce qui signifie que je veux d'abord les États-Unis, puis le Canada, puis les Bahamas:
Tri souhaité:
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
Existe-t-il un moyen de passer le tri Unix un ordre de tri personnalisé qu'il peut ensuite appliquer? Quelque chose comme:
$ sort -t ',' -k 2,2:'United States, Canada, Bahamas' -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Merci!
t
au lieu de f
dans la dernière ligne?
join
commande, mais vous pourriez vous retrouver avec beaucoup de tri - les fichiers d'entrée pourjoin
doivent être triés dans un ordre, puis vous utiliseriez àsort
nouveau pour mettre les données dans un ordre différent (et la perte de la colonne d'ordre de tri en tant qu'étape de post-tri).