¿Qué está pasando en el siguiente fragmento de código? No estoy obteniendo mi salida esperada.
Creo que fue un error, pero ocurre para 2 programas diferentes (uniq y sort), por lo que sospecho que tiene algo que ver con ... bueno, no sé qué ... de ahí la pregunta.
Los primeros 3 (de 4) ejemplos funcionan, pero el cuarto falla.
Esperaría el mismo comportamiento para todos y cada uno de los personajes.
es decir. para imprimir 2 líneas (de las 3 líneas de entrada) ... pero en el cuarto caso, solo obtengo 1 línea (para ambos sort -u
y uniq
); ¡Los dos lins idénticos se desvanecen!
He convertido la salida '\ n' en espacio para una vista compacta.
Estoy usando uniq y ordenar desde (GNU coreutils) 7.4 ... ejecutándose en el escritorio Ubuntu 10.04.3 LTS.
La secuencia de comandos:
{
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
}
La salida:
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
y uniq
funciona bien con: LC_COLLATE=C; echo -e "〼\n〇\n〇" |sort -u
(o |uniq
)
sort
solo (sin la opción -u ) ... no engulle caracteres ... Lo que entra, sale ... Sin embargo, como puede esperarse de Gilles, la explicación de los caracteres unicode "exóticos" que tienen el mismo valor canónico , estos los caracteres no se ordenan, aparte de eso, se muestran como un grupo FIFO sin clasificar en la "parte superior" de la salida de la clasificación ... Entonces, realmente hay dos problemas aquí: 1. Los caracteres no se ordenan como podría ser "ingenuamente "esperado, y 2. La característica" única "de ambossort
yuniq
perder datos (en algunos casos).