Điều gì đang xảy ra trong đoạn mã sau đây? Tôi không nhận được đầu ra mong đợi của tôi.
Tôi nghĩ đó là một lỗi, nhưng nó xảy ra với 2 chương trình khác nhau (uniq và sort), vì vậy tôi nghi ngờ đó là một cái gì đó để làm với ... tốt, tôi không biết những gì .. vì vậy câu hỏi.
3 (4) ví dụ đầu tiên hoạt động, nhưng lần thứ 4 thất bại!.
Tôi mong đợi hành vi tương tự cho bất kỳ và tất cả các nhân vật.
I E. để in ra 2 dòng (từ 3 dòng đầu vào) ... nhưng trong trường hợp thứ 4, tôi chỉ nhận được 1 dòng (cho cả hai sort -u
và uniq
); Hai cái giống hệt nhau biến mất!
Tôi đã chuyển đổi đầu ra '\ n' thành không gian để thu gọn tầm nhìn.
Tôi đang sử dụng uniq và sắp xếp từ (GNU coreutils) 7.4 ... đang chạy trên máy tính để bàn Ubuntu 10.04.3 LTS.
Kịch bản:
{
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
}
Đầu ra:
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
và uniq
hoạt động tốt với: LC_COLLATE=C; echo -e "〼\n〇\n〇" |sort -u
(hoặc |uniq
)
sort
một mình (không có tùy chọn -u ) ... không ngấu nghiến các ký tự .. Những gì diễn ra, xuất hiện ... Tuy nhiên, như lời giải thích của Gilles về các ký tự unicode "kỳ lạ" có cùng giá trị chính tắc , những thứ này các ký tự không được sắp xếp, ngoài ra chúng là đầu ra dưới dạng nhóm FIFO chưa được sắp xếp thành "đầu" của đầu ra sắp xếp ... Vì vậy, có hai vấn đề thực sự ở đây: 1. Các ký tự không được sắp xếp một cách ngây thơ "Dự kiến và 2. Tính năng" duy nhất "của cả haisort
vàuniq
mất dữ liệu (trong một số trường hợp).