Aşağıdaki kod snippet'inde neler oluyor? Beklediğim çıktıyı alamıyorum.
Ben bir hata olduğunu düşünürdüm, ama 2 farklı program (uniq ve sort) için olur, bu yüzden bununla ilgili bir şey olduğundan şüpheleniyorum ... şey, ne olduğunu bilmiyorum .. dolayısıyla soru.
İlk 3 (4) örnek işe yarıyor, ancak dördüncü başarısız oluyor.
Tüm karakterler için aynı davranışı beklerdim.
yani. 2 satır yazdırmak için (3 satır girişten) ... ancak 4. durumda, sadece 1 satır alıyorum (hem sort -u
ve hem de uniq
); iki özdeş astar yok oluyor!
Görüntü \ n 'çıktısını kompaktlık için boşluğa dönüştürdüm.
Ben uniq ve sıralama (GNU coreutils) 7.4 ... Ubuntu 10.04.3 LTS masaüstünde çalışan kullanıyorum.
Senaryo:
{
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
}
Çıktı:
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
ve uniq
şununla iyi çalışın: LC_COLLATE=C; echo -e "〼\n〇\n〇" |sort -u
(veya |uniq
)
sort
tek başına ( -u seçeneği olmadan ) ... karakterleri yutmaz .. İçeri girer, çıkar ... Ancak, Gilles'in aynı kanonik değere sahip "egzotik" unicode karakterlerin açıkladığı gibi , bunlar Karakterler, sıralamanın çıktısının "üst" kısmına ayrılmamış bir FIFO grubu olarak çıkarılmaları dışında sıralanmazlar ... Burada gerçekten iki sorun var: 1. Karakterler "safça" olarak sıralanmıyor "beklenen ve 2. Hem" benzersiz "özelliğisort
veuniq
veri kaybı (bazı durumlarda).