次のコードスニペットで何が起こっていますか?期待どおりの出力が得られません。
バグだと思いますが、2つの異なるプログラム(uniqとsort)で発生するので、何か関係があるのではないかと思います。
最初の3つ(4つのうち)の例は機能しますが、4番目の例は失敗します。
すべてのキャラクターで同じ動作が期待されます。
すなわち。(入力の3行から)2行を出力するには... 4番目のケースでは、1行しか表示されません(sort -u
およびの両方uniq
)。2つの同一のリンが消えるだけです!
表示をコンパクトにするために、出力「\ 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オプションなしで)...文字を取得しません..何が入ってくるかが出てきます...しかし、同じ標準値を持つ「エキゾチックな」ユニコード文字のGillesの説明から予想されるように、これらは文字は並べ替えられませんが、並べ替えの出力の「先頭」に並べ替えられていないFIFOグループとして出力されます...したがって、実際には2つの問題があります:1.文字が「単純に」並べ替えられない両方のユニークな『機能」期待、そして2』と(場合によっては)失うデータ。sort
uniq