Büyük küçük harf duyarlılığına göre GNU sıralama


35

sortHer zaman sıralama harf duyarsız tarafından Ubuntu 10.04 (Lucid) 'de yarar, tıpkı belirttiğiniz takdirde --ignore-casekendisine.

The two sort just give the same result: 

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

Ama bazen büyük / küçük harf duyarlı olarak sıralama yapmak istiyorum, bu yüzden büyük harfler önce gelir, sonra küçük harfler. Mümkün mü?

Yanıtlar:


31

Harmanlama sırasını geçersiz kıl.

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

5
Bu işe yarar, ancak tanım gereği sadece yabancı karakter yoksa. oyunda; 7 bitlik ASCII harflerinden sonra sıralanırlar ; dene echo $'B\nÄ\nb\na' | LC_COLLATE=C sort. Yerel sortolmayan GNU’nun her zaman büyük / küçük harfe duyarlı sıralama yapması bir hata olarak görülmemeli midir? C
mklement0

"Yabancı karakterler" ile ilgili olarak, C.UTF-8localale ( LC_COLLATE=C.UTF-8), ascii olmayan UTF-8 karakterlerini "normal" olarak ele alırken büyük / küçük harfe duyarlıdır. Ne yazık ki, glibc'de yukarı akışta mevcut değildir ve yalnızca Debian, Ubuntu ve türevleri tarafından yayar.
aplaice

13

İlginçtir, buna benzer bir sıralama düzeni daha mevcuttur:

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

Büyük harf, küçük harf karşılığından önce gelir.

İşte en_US.UTF-8yerel ayardaki çıktılarının karşılaştırılması ("d" ve "D" ekledim) (geçersiz kılınanlar hariç):

  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

Çıktı:

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

İlginç; Bu davranışı sort v5.93GNU'da görüyorum (OS X 10.9.3 (!) İle birlikte geliyor) ve v8.13ama içinde v8.21ve DEĞİL v8.22. 2. ve 4. sonuçların hala eşdeğer olarak kabul edilebileceğini düşünüyorum (ancak bu açıkça yabancı karakterlerin eklenmesiyle değişecektir).
mklement0
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.