GNU urutkan berdasarkan case-sensitive


35

The sortutilitas di Ubuntu 10.04 (Lucid) selalu Urut berdasarkan kasus-sensitif, seperti jika Anda menentukan --ignore-caseuntuk itu.

The two sort just give the same result: 

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

Tetapi kadang-kadang saya ingin menyortir berdasarkan huruf besar-kecil, jadi huruf besar datang lebih dulu, kemudian huruf kecil. Apa itu mungkin?

Jawaban:


31

Timpa urutan pemeriksaan.

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

5
Ini berfungsi, tetapi menurut definisi hanya jika tidak ada karakter asing. sedang bermain; mereka akan mengurutkan setelah surat ASCII 7-bit; coba echo $'B\nÄ\nb\na' | LC_COLLATE=C sort. Bukankah fakta bahwa GNU sortdengan non- Clokal selalu melakukan penyortiran case-INsensitive dianggap sebagai bug ?
mklement0

Mengenai "karakter asing", C.UTF-8locale ( LC_COLLATE=C.UTF-8) akan mengurutkan huruf besar-kecil, sambil memperlakukan karakter UTF-8 non-ascii "normal". Sayangnya, itu tidak tersedia di hulu di glibc dan hanya ditambal oleh Debian, Ubuntu dan turunannya.
aplaice

13

Menariknya, belum ada pemesanan jenis lain yang tersedia seperti ini:

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

yang menempatkan huruf besar sebelum huruf kecil yang sesuai.

Berikut ini adalah perbandingan dari output mereka (saya menambahkan "d" dan "D") di en_US.UTF-8lokal (kecuali di mana ditimpa):

  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

Keluaran:

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

Menarik; Saya melihat perilaku ini di GNU sort v5.93(dilengkapi dengan OS X 10.9.3 (!)) Dan v8.13, tetapi TIDAK di v8.21dan v8.22. Saya kira hasil 2. dan 4. masih bisa dianggap setara (tapi itu jelas akan berubah dengan penambahan karakter asing).
mklement0
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.