Che cosa sta succedendo nel seguente frammento di codice? Non sto ottenendo il risultato atteso.
Penserei che fosse un bug, ma succede per 2 programmi diversi (uniq e sort), quindi ho il sospetto che abbia a che fare con ... beh, non so cosa ... da qui la domanda.
I primi 3 (di 4) esempi funzionano, ma il quarto fallisce !.
Mi aspetterei lo stesso comportamento per tutti i personaggi.
vale a dire. per stampare 2 righe (dalle 3 righe di input) ... ma nel 4 ° caso, ottengo solo 1 riga (per entrambi sort -u
e uniq
); i due lins identici svaniscono!
Ho convertito l'output '\ n' in spazio per la compattezza della vista.
Sto usando uniq e ordina da (GNU coreutils) 7.4 ... in esecuzione sul desktop Ubuntu 10.04.3 LTS.
Il copione:
{
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
}
L'output:
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
e uniq
funziona bene con: LC_COLLATE=C; echo -e "〼\n〇\n〇" |sort -u
(o |uniq
)
sort
da solo (senza l' opzione -u ) ... non inghiotte i caratteri .. Ciò che entra, viene fuori ... Tuttavia, come ci si può aspettare dalla spiegazione di Gilles dei caratteri "esotici" unicode con lo stesso valore canonico , questi i caratteri non vengono ordinati, a parte il fatto che vengono emessi come un gruppo FIFO non ordinato nella parte superiore dell'output dell'ordinamento ... Quindi ci sono davvero due problemi qui: 1. I caratteri non vengono ordinati come potrebbero essere "ingenui "previsto, e 2. La funzionalità" unica "di entrambisort
euniq
perdita di dati (in alcuni casi).