Сортування GNU залежно від регістру


35

sortУтиліта в Ubuntu 10.04 (Lucid) завжди сортувати по нечутливі до регістру, так само , як якщо ви вкажете --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

Але іноді мені хочеться сортувати за регістровими літерами, тому спочатку бувають великі літери, а потім малі літери. Це можливо?

Відповіді:


31

Заміна порядку порівняння.

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

5
Це працює, але за визначенням, лише якщо немає іноземних символів. в грі; вони будуть сортувати після 7-бітних літер ASCII; спробуйте echo $'B\nÄ\nb\na' | LC_COLLATE=C sort. Чи не слід вважати помилкою факт, що GNU sortз нелокальною Cлокалізацією завжди виконує сортування, що не сприймає регістр ?
mklement0

Щодо "іноземних символів", то C.UTF-8locale ( LC_COLLATE=C.UTF-8) буде сортувати залежно від регістру, а під час обробки символів UTF-8, які не належать ascii, "нормально". На жаль, він недоступний в потоці в glibc і лише зафіксований Debian, Ubuntu та похідними.
aplaice

13

Цікаво, що ще одне замовлення сортування є таким:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.