Почему сортировка меняет порядок строк с одинаковыми ключами сортировки?

31

Вот данные:

D 2
B 2
A 2

Когда я запускаю эту команду:

sort -k2,2 file

это выводит:

A 2
B 2
D 2

Мой вопрос заключается в том, что, когда я указываю только второй столбец -k2,2, почему он сортируется также по первому столбцу? Поскольку все значения второго столбца одинаковы, он должен оставить все как есть.

dwwdw
источник
7
[Semi-OT]: FYI, сортировка, которая сохраняет порядок ввода при совпадении ключей сортировки, в компьютерной науке известна как стабильная сортировка. Часто сортировки нестабильны, потому что многие нестабильные алгоритмы сортировки быстрее или проще. Дело не в этом, но знание термина CS делает документацию manpage для -sопции понятной и доступной для поиска.
Дероберт

Ответы:

34

Это последнее средство сравнения . При сравнении двух строк, если все ключи сравниваются одинаково, то в качестве последнего средства выполняется базовое сравнение строк для всех строк ( -rвсе еще применяется, но другие параметры не применяются). Это поведение определяется POSIX :

За исключением случаев, когда указана опция -u, строки, которые в противном случае сравниваются как равные, должны быть упорядочены так, как если бы не присутствовали ни одна из опций -d, -f, -i, -n или -k (но с -r все еще действует, если это было указано) и со всеми байтами в строках, значимых для сравнения. Порядок, в котором записываются строки, которые по-прежнему сравниваются, не определен.

В GNU sortэто последнее средство сравнения можно отключить с помощью опции -s(для стабильной версии ).

Стефан Шазелас
источник