以下代码段中发生了什么?我没有得到预期的输出。
我认为这是一个错误,但是它发生在2个不同的程序(uniq和sort)上,所以我怀疑这与...有关,嗯,我不知道该怎么办。
前4个示例中的前3个有效,但第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选项)...不会吞噬字符。.进来了,出来了...但是,正如Gilles对具有相同规范值的“异国” unicode字符的解释所预期的那样,这些字符没有被排序,除了它们作为未排序的FIFO组输出到排序输出的“顶部” ...所以这里确实存在两个问题:1.字符没有被排序,就像“天真”一样“预期,以及2‘两者的独特’功能sort
和uniq
数据丢失(在某些情况下)。