เกิดอะไรขึ้นในข้อมูลโค้ดต่อไปนี้ ฉันไม่ได้รับผลลัพธ์ที่คาดหวัง
ฉันคิดว่ามันเป็นข้อผิดพลาด แต่มันเกิดขึ้นสำหรับ 2 โปรแกรมที่แตกต่างกัน (uniq และ sort) ดังนั้นฉันสงสัยว่ามันเป็นบางสิ่งที่ต้องทำกับ ... อืมฉันไม่รู้ว่า ... ดังนั้นคำถาม
ตัวอย่าง 3 (4 จาก) แรกทำงานได้ แต่ 4 ล้มเหลว!
ฉันคาดว่าจะมีพฤติกรรมแบบเดียวกันสำหรับตัวละครทุกตัว
กล่าวคือ เพื่อพิมพ์ 2 บรรทัด (จากอินพุต 3 บรรทัด) ... แต่ในกรณีที่ 4 ฉันได้รับเพียง 1 บรรทัด (สำหรับทั้งคู่sort -u
และuniq
); สอง lins ที่เหมือนกันเพิ่งหายไป!
ฉันได้แปลงเอาท์พุท '\ n' เป็นพื้นที่เพื่อความกะทัดรัด
ฉันใช้uniqและเรียงลำดับจาก (GNU coreutils) 7.4 ... ทำงานบน Ubuntu 10.04.3 LTS desktop
สคริปต์:
{
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 ) ... ไม่ได้ฮุบตัวอักษร .. อะไรจะเกิดขึ้นออกมา ... อย่างไรก็ตามอย่างที่คาดไว้โดยคำอธิบายของกิลส์ของ "แปลกใหม่" ตัวอักษร unicode ที่มีค่ามาตรฐานเดียวกันเหล่านี้ ตัวละครไม่ได้รับการจัดเรียงนอกเหนือจากที่พวกเขาจะถูกส่งออกเป็นกลุ่ม FIFO ไม่ได้เรียงลำดับไปยัง "ด้านบน" ของการจัดเรียงของเอาท์พุท ... ดังนั้นจึงมีสองประเด็นจริง ๆ ที่นี่: 1. ตัวละครที่ไม่ได้เรียงตามอาจ "คาดหวังและ 2 คุณลักษณะ" ที่ไม่ซ้ำกัน "ของทั้งสองsort
และuniq
ข้อมูลสูญหาย (ในบางกรณี)