J'essaie de trier sur plusieurs colonnes. Les résultats ne sont pas comme prévu.
Voici mes données (people.txt):
Simon Strange 62
Pete Brown 37
Mark Brown 46
Stefan Heinz 52
Tony Bedford 50
John Strange 51
Fred Bloggs 22
James Bedford 21
Emily Bedford 18
Ana Villamor 44
Alice Villamor 50
Francis Chepstow 56
Ce qui suit fonctionne correctement:
bash-3.2$ sort -k2 -k3 <people.txt
Emily Bedford 18
James Bedford 21
Tony Bedford 50
Fred Bloggs 22
Pete Brown 37
Mark Brown 46
Francis Chepstow 56
Stefan Heinz 52
John Strange 51
Simon Strange 62
Ana Villamor 44
Alice Villamor 50
Mais ce qui suit ne fonctionne pas comme prévu:
bash-3.2$ sort -k2 -k1 <people.txt
Emily Bedford 18
James Bedford 21
Tony Bedford 50
Fred Bloggs 22
Pete Brown 37
Mark Brown 46
Francis Chepstow 56
Stefan Heinz 52
John Strange 51
Simon Strange 62
Ana Villamor 44
Alice Villamor 50
J'essayais de trier par nom de famille, puis par prénom, mais vous verrez que les Villamors ne sont pas dans le bon ordre. J'espérais trier par nom de famille, puis lorsque les noms de famille correspondaient, trier par prénom.
Il semble qu'il y ait quelque chose dans la façon dont cela devrait fonctionner que je ne comprends pas. Je pourrais faire cela d'une autre manière bien sûr (en utilisant awk), mais je veux comprendre le genre.
J'utilise le shell Bash standard sous Mac OS X.
Avec GNU,
sort
vous le faites comme ceci, vous n’êtes pas sûr de MacOS:Mise à jour en fonction des commentaires. Cité de
man sort
:la source
-k
d’inclure autant que possible.sort
comparera toute la ligne. Ou avec GNU,sort
vous pouvez utiliser-s
pour un tri stable.