Чому сортування змінює порядок рядків однаковими ключами сортування?


31

Ось дані:

D 2
B 2
A 2

Коли я запускаю цю команду:

sort -k2,2 file

він виводить:

A 2
B 2
D 2

Моє запитання полягає в тому, що коли я вказую лише другий стовпець -k2,2, чому він сортується також за першим стовпцем? Оскільки всі значення другого стовпця однакові, слід залишити його таким, яким він є.


7
[Semi-OT]: FYI, сорт, який зберігає порядок введення, коли клавіші сортування збігаються, в інформатиці відомий як стабільний сорт. Часто сортування не є стабільними, оскільки багато нестабільних алгоритмів сортування швидше або простіше. Тут справа не в тому, але знаючи термін CS, цей документ дає змогу -sзрозуміти та зрозуміти цей документ .
дероберт

Відповіді:


34

Це останнє порівняння . Якщо порівнювати два рядки, якщо всі ключі порівнюються рівними, то в крайньому випадку проводиться базове порівняння рядків для всіх рядків ( -rвсе-таки застосовується, але не інші варіанти). Така поведінка визначена POSIX :

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

З GNU sortце порівняння в останню чергу можна відключити за допомогою -s(для стабільної ) опції.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.