ทำไมการเรียงลำดับจึงเปลี่ยนลำดับของบรรทัดด้วยคีย์การเรียงลำดับที่เหมือนกัน


31

นี่คือข้อมูล:

D 2
B 2
A 2

เมื่อฉันเรียกใช้คำสั่งนี้:

sort -k2,2 file

มันเอาท์พุท:

A 2
B 2
D 2

คำถามของฉันคือเมื่อฉันระบุเฉพาะคอลัมน์ที่สอง-k2,2ทำไมมันเรียงตามคอลัมน์แรกเช่นกัน เนื่องจากค่าทั้งหมดของคอลัมน์ที่สองเหมือนกันดังนั้นจึงควรปล่อยไว้ตามที่เป็น


7
[Semi-OT]: FYI การเรียงลำดับที่รักษาลำดับการป้อนข้อมูลเมื่อจับคู่การเรียงลำดับคีย์เป็นที่รู้จักกันในศาสตร์คอมพิวเตอร์เป็นเรียงลำดับที่มั่นคง บ่อยครั้งที่การเรียงลำดับไม่เสถียรเนื่องจากอัลกอริธึมการเรียงที่ไม่เสถียรจำนวนมากนั้นเร็วกว่าหรือง่ายกว่า ไม่ใช่ที่นี่ แต่การรู้คำศัพท์ CS ทำให้เอกสาร manpage เป็น-sตัวเลือกที่เข้าใจได้และสามารถค้นหาได้
derobert

คำตอบ:


34

นั่นคือการเปรียบเทียบสุดท้าย เมื่อเปรียบเทียบสองบรรทัดหากคีย์ทั้งหมดเปรียบเทียบเท่ากันดังนั้นจึงเป็นวิธีสุดท้ายการเปรียบเทียบสตริงพื้นฐานของทั้งบรรทัดจะดำเนินการ ( -rยังคงใช้ แต่ไม่ใช่ตัวเลือกอื่น ๆ ) พฤติกรรมนั้นถูกระบุโดยPOSIX :

ยกเว้นเมื่อระบุอ็อพชัน -u บรรทัดที่เปรียบเทียบเป็นอย่างอื่นจะถูกจัดเรียงราวกับว่าไม่มีตัวเลือกใด ๆ -d, -f, -i, -n หรือ -k อยู่ (แต่ด้วย -r ยังคงมีผลอยู่หาก มันถูกระบุไว้) และมีไบต์ทั้งหมดในบรรทัดที่สำคัญต่อการเปรียบเทียบ ลำดับที่บรรทัดที่ยังคงเปรียบเทียบเท่ากันนั้นไม่ได้ระบุเป็นลายลักษณ์อักษร

ด้วย GNU sortการเปรียบเทียบวิธีสุดท้ายสามารถปิดใช้งานได้ด้วยตัวเลือก-s(เพื่อความเสถียร )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.