Mengapa sort mengubah urutan baris dengan tombol sortir yang identik?

31

Berikut ini datanya:

D 2
B 2
A 2

Ketika saya menjalankan perintah ini:

sort -k2,2 file

itu output:

A 2
B 2
D 2

Pertanyaan saya adalah ketika saya hanya menentukan kolom kedua -k2,2, mengapa kolom ini juga diurutkan menurut kolom pertama? Karena semua nilai kolom kedua sama, ia harus membiarkannya apa adanya.

dwwdw
sumber
7
[Semi-OT]: FYI, jenis yang mempertahankan urutan input ketika kunci sortir dikenal dalam ilmu komputer sebagai jenis stabil . Seringkali sort tidak stabil, karena banyak algoritma sorting non-stabil lebih cepat atau lebih sederhana. Tidak demikian halnya di sini, tetapi mengetahui istilah CS membuat dokumen manual untuk -sopsi dapat dimengerti & ditemukan.
derobert

Jawaban:

34

Itu perbandingan terakhir . Saat membandingkan dua baris, jika semua kunci sama dengan yang sama, maka sebagai upaya terakhir, perbandingan string dasar dari seluruh baris dilakukan ( -rmasih berlaku tetapi bukan opsi lain). Perilaku itu ditentukan oleh POSIX :

Kecuali ketika opsi -u dispesifikasikan, garis yang membandingkan sama harus dipesan seolah-olah tidak ada opsi -d, -f, -i, -n, atau -k hadir (tetapi dengan -r masih berlaku, jika itu ditentukan) dan dengan semua byte di baris signifikan untuk perbandingan. Urutan di mana baris yang masih membandingkan sama ditulis tidak ditentukan.

Dengan GNU sort, perbandingan pilihan terakhir dapat dinonaktifkan dengan opsi -s(untuk stabil ).

Stéphane Chazelas
sumber