Tại sao sắp xếp thay đổi thứ tự các dòng với các phím sắp xếp giống hệt nhau?


31

Đây là dữ liệu:

D 2
B 2
A 2

Khi tôi chạy lệnh này:

sort -k2,2 file

nó xuất ra:

A 2
B 2
D 2

Câu hỏi của tôi là khi tôi chỉ định cột thứ hai -k2,2, tại sao nó cũng sắp xếp theo cột đầu tiên? Vì tất cả các giá trị của cột thứ hai là như nhau, nên nó để nguyên như vậy.


7
[Semi-OT]: FYI, một loại bảo tồn thứ tự đầu vào khi khớp khóa sắp xếp được biết đến trong khoa học máy tính là loại ổn định . Các loại thường không ổn định, vì nhiều thuật toán sắp xếp không ổn định nhanh hơn hoặc đơn giản hơn. Không phải là trường hợp ở đây, nhưng biết thuật ngữ CS làm cho các tài liệu manpage cho -stùy chọn dễ hiểu và có thể tìm thấy.
derobert

Câu trả lời:


34

Đó là so sánh cuối cùng . Khi so sánh hai dòng, nếu tất cả các khóa so sánh bằng nhau, thì như là phương sách cuối cùng, một so sánh chuỗi cơ bản của toàn bộ dòng được thực hiện ( -rvẫn áp dụng nhưng không áp dụng cho các tùy chọn khác). Hành vi đó được chỉ định bởi POSIX :

Ngoại trừ khi tùy chọn -u được chỉ định, các dòng so sánh bằng nhau sẽ được sắp xếp theo thứ tự nếu không có tùy chọn -d, -f, -i, -n hoặc -k (nhưng vẫn có hiệu lực, nếu nó đã được chỉ định) và với tất cả các byte trong các dòng có ý nghĩa so sánh. Thứ tự mà các dòng vẫn so sánh bằng nhau được viết là không xác định.

Với GNU sort, phép so sánh cuối cùng đó có thể bị vô hiệu hóa với tùy chọn -s(cho ổn định ).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.