coreutils gnu เรียงลำดับแตกหรือไม่


10

พิจารณาอินพุตต่อไปนี้เพื่อจัดเรียง:

cat > foo <<EOM
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2
EOM

ตอนนี้ลองเรียกใช้ sort foo

ผลลัพธ์ไม่ถูกจัดเรียงเมื่อพยายามทำสิ่งนี้บนกล่อง linux ของฉัน (gnu coreutils รุ่น 6.9-7.4) เอาต์พุตถูกเรียงลำดับเมื่อรันภายใต้ cygwin (gnu coretuils 8.5) ความคิดเห็น?

คำตอบ:


18

การเรียงลำดับขึ้นอยู่กับโลแคล โดยเฉพาะมันขึ้นอยู่กับ$LC_COLLATE(อาจถูกแทนที่โดย$LC_ALL) กลับไปที่$LANGหากไม่มี คำสั่งlocaleจะแสดงให้คุณเห็นถึงคุณค่าที่คุณได้ทำงานอย่างมีประสิทธิภาพ ดูman 3 strcoll, man 3 setlocaleฯลฯ

LC_COLLATE=C(หรือPOSIXไม่มีสถานที่เกิดเหตุเลย) ส่งผลให้มีการเปรียบเทียบแบบไบต์ต่อไบต์อย่างเข้มงวด

LC_COLLATE=en_US.utf8 ส่งผลให้มีการเรียงลำดับตัวอักษร - ความเท่าเทียมกันด้วยเครื่องหมายวรรคตอนที่ถูกละเว้นและตัวอักษรภายในระดับความเท่าเทียมกันเดียวกันได้รับการปฏิบัติอย่างเท่าเทียมกัน


แน่นอนexport LC_COLLATE=Cทำให้การเรียงลำดับเป็นไปตามที่คาดไว้
Leo Alekseyev

3
สำเนียงจะไม่ถูกละเว้นอย่างสมบูรณ์ Stephaneทุกประเภทก่อน Stéphaneแต่ทุกประเภทหลังStephanie เทียบเท่ากับ(เช่น, , ... ) แต่ถ้ามีการผูกแล้วคำสั่งระหว่างผู้ที่มีการกำหนดไว้อย่างดี มันเหมือนกันในพจนานุกรมกระดาษฉบับเก่าที่ดี Stéphaneéeêë
Stéphane Chazelas

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