Я пытаюсь сортировать по нескольким столбцам. Результаты не такие, как ожидалось.
Вот мои данные (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
Следующее работает правильно:
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
Но следующее не работает должным образом:
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
Я пытался отсортировать по фамилии, а затем по имени, но вы увидите, что Villamors не в правильном порядке. Я надеялся сортировать по фамилии, а затем, когда фамилии совпадали, сортировать по имени.
Кажется, есть кое-что о том, как это должно работать, я не понимаю. Конечно, я мог бы сделать это другим способом (используя awk), но я хочу понять сортировку.
Я использую стандартную оболочку Bash в Mac OS X.
С GNU
sort
вы делаете это так, не уверенный в MacOS:Обновление в соответствии с комментарием. Цитируется из
man sort
:источник
-k
включала столько, сколько может.sort
будет сравниваться вся строка. Или с GNUsort
вы можете использовать-s
для стабильной сортировки.