Estou tentando classificar em várias colunas. Os resultados não são os esperados.
Aqui estão meus dados (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
O seguinte funciona corretamente:
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
Mas, o seguinte não funciona conforme o esperado:
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
Eu estava tentando classificar por sobrenome e depois pelo primeiro nome, mas você verá que os Villamors não estão na ordem correta. Eu esperava classificar por sobrenome e, em seguida, quando os sobrenomes correspondiam, para classificar pelo primeiro nome.
Parece que há algo sobre como isso deve funcionar, eu não entendo. Eu poderia fazer isso de outra maneira, é claro (usando o awk), mas quero entender o tipo.
Estou usando o shell Bash padrão no Mac OS X.
Com o GNU,
sort
você faz assim, não tem certeza sobre o MacOS:Atualize de acordo com o comentário. Citado em
man sort
:fonte
-k
inclua o máximo possível.sort
comparará a linha inteira. Ou com o GNUsort
você pode usar-s
para classificação estável.