Що відбувається в наступному фрагменті коду? Я не отримую очікуваного результату.
Я думаю, що це помилка, але це трапляється для двох різних програм (uniq і сортування), тому я підозрюю, що це щось стосується ... ну, я не знаю, що .. звідси питання.
Перші 3 (із 4) прикладів працюють, але 4-й не вдається !.
Я б очікував однакової поведінки для всіх персонажів.
тобто. роздрукувати 2 рядки (з 3 рядків введення) ... але в 4-му випадку я отримую лише 1 рядок (і для обох, sort -u
і для uniq
); обидва однакові кришки просто зникають!
Я перетворив висновок '\ n' у простір для компактності перегляду.
Я використовую uniq і сортую з (GNU coreutils) 7.4 ..., що працює на робочому столі Ubuntu 10.04.3 LTS.
Сценарій:
{
locale -k LC_COLLATE
echo
for c1 in x 〼 ;do
for c2 in z 〇 ;do
echo -n "asis : "; echo -e "$c1\n$c2\n$c2" |tr '\n' ' ';echo
echo -n "uniq : "; echo -e "$c1\n$c2\n$c2" |uniq |tr '\n' ' ';echo
echo -n "sort -u: "; echo -e "$c1\n$c2\n$c2" |sort -u |tr '\n' ' ';echo
echo
done
echo
done
}
Вихід:
collate-nrules=4
collate-rulesets=""
collate-symb-hash-sizemb=2081
collate-codeset="UTF-8"
asis : x z z
uniq : x z
sort -u: x z
asis : x 〇 〇
uniq : x 〇
sort -u: 〇 x
asis : 〼 z z
uniq : 〼 z
sort -u: 〼 z
asis : 〼 〇 〇
uniq : 〼
sort -u: 〼
# In the last example (of 4) where did the '〇' go? .. U+3007 IDEOGRAPHIC NUMBER ZERO
#
sort -u
і uniq
працюйте добре з: LC_COLLATE=C; echo -e "〼\n〇\n〇" |sort -u
(або |uniq
)
sort
поодинці (без опції -u ) ... не збиває символів. Що входить, виходить ... Однак, як можна очікувати поясненням Гілла про "екзотичні" символи унікоду, що мають однакове канонічне значення , ці символи не сортуються, за винятком того, що вони виводяться як несортована група FIFO до "вершини" виводу сортування ... Отже, тут справді два питання: 1. Персонажі не сортуються так, як могли б бути "наївно" "очікуваного та 2." Унікальна "особливістьsort
іuniq
втрачає дані (в деяких випадках).