GNU จัดเรียงตามตัวพิมพ์ใหญ่ - เล็ก


32

sort ยูทิลิตี้ใน Ubuntu 10.04 (สุวิมล) จัดเรียงตามตัวพิมพ์เล็กและตัวพิมพ์ใหญ่เช่นเดียวกับที่คุณระบุ --ignore-case เพื่อมัน

The two sort just give the same result: 

echo -e "c\nb\nB\na" | sort
echo -e "c\nb\nB\na" | sort --ignore-case

แต่บางครั้งฉันต้องการจัดเรียงตามตัวพิมพ์ใหญ่ - เล็กดังนั้นตัวอักษรตัวพิมพ์ใหญ่มาก่อนแล้วตามด้วยตัวพิมพ์เล็ก มันเป็นไปได้?

คำตอบ:


29

แทนที่ลำดับการเรียง

echo -e "c\nb\nB\na" | LC_COLLATE=C sort

4
ใช้งานได้ แต่ตามคำจำกัดความเฉพาะเมื่อไม่มีตัวอักษรต่างประเทศ กำลังเล่นอยู่; พวกเขาจะเรียงลำดับ หลังจาก ตัวอักษร ASCII 7 บิต ลอง echo $'B\nÄ\nb\na' | LC_COLLATE=C sort. ความจริงไม่ควร GNU sort กับที่ไม่ใช่ C สถานที่เกิดเหตุ เสมอ ดำเนินการเรียงลำดับตัวพิมพ์เล็กและใหญ่ให้ถือว่าเป็น แมลง ?
mklement0

10

ที่น่าสนใจยังมีคำสั่งการเรียงลำดับอื่นเช่นนี้:

echo -e "c\nb\nB\na" | LC_COLLATE=C sort --ignore-case

ซึ่งทำให้ตัวอักษรตัวพิมพ์ใหญ่หน้าตัวอักษรตัวพิมพ์เล็กที่สอดคล้องกัน

นี่คือการเปรียบเทียบผลลัพธ์ของพวกเขา (ฉันเพิ่ม "d" และ "D") ใน en_US.UTF-8 สถานที่เกิดเหตุ (ยกเว้นที่แทนที่):

  1. echo -e "d\nD\nc\nb\nB\na" | sort
  2. echo -e "d\nD\nc\nb\nB\na" | sort --ignore-case
  3. echo -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sort
  4. echo -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sort --ignore-case

เอาท์พุท:

1   2   3   4
-   -   -   -
a   a   B   a
b   b   D   B
B   B   a   b
c   c   b   c
d   d   c   D
D   D   d   d

ที่น่าสนใจ; ฉันเห็นพฤติกรรมนี้ใน GNU sort v5.93 (มาพร้อมกับ OS X 10.9.3 (!)) และ v8.13แต่ไม่ใช่ใน v8.21 และ v8.22. ฉันเดาว่าผลลัพธ์ของ 2 และ 4 ยังถือว่าเทียบเท่า
mklement0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.