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.