จะลบบรรทัดที่ซ้ำกันได้อย่างไร?
คำสั่งที่มักใช้คู่กับ sort อีกคำสั่งหนึ่งคือ uniq
ซึ่งทำหน้าที่ลบบรรทัดที่ซ้ำกันออก
โดยเฉพาะอย่างยิ่ง จะลบเฉพาะบรรทัดที่ซ้ำกันติดต่อกันเท่านั้น
หากไฟล์มีเนื้อหาดังนี้:
2017-07-03
2017-07-03
2017-08-03
2017-08-03
uniq จะแสดงผลเป็น:
2017-07-03
2017-08-03
แต่ถ้าไฟล์มีเนื้อหาดังนี้:
2017-07-03
2017-08-03
2017-07-03
2017-08-03
uniq จะแสดงผลทั้ง 4 บรรทัด
เหตุผลคือ uniq ถูกออกแบบมาให้ทำงานกับไฟล์ขนาดใหญ่
หากต้องการลบบรรทัดที่ซ้ำกันแม้ไม่ได้อยู่ติดกัน
ก็จำเป็นต้องเก็บข้อมูลทั้งไฟล์ไว้ในหน่วยความจำ
(หรืออย่างน้อยก็ทุกบรรทัดที่ไม่ซ้ำที่เจอมาแล้ว)
การลบเฉพาะบรรทัดที่ซ้ำกันติดต่อกันจึงช่วยให้ต้องเก็บเพียงบรรทัดล่าสุดที่ไม่ซ้ำไว้ในหน่วยความจำเท่านั้น
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Introduction to Shell
คำแนะนำการฝึกหัด
เขียน pipeline เพื่อ:
- ดึงคอลัมน์ที่ 2 จาก
seasonal/winter.csv - ลบคำว่า "Tooth" ออกจากผลลัพธ์ เพื่อแสดงเฉพาะชื่อฟัน
- เรียงลำดับผลลัพธ์เพื่อให้ชื่อฟันที่เหมือนกันอยู่ติดกัน และ
- แสดงชื่อฟันแต่ละชื่อหนึ่งครั้งพร้อมกับจำนวนครั้งที่ปรากฏ
จุดเริ่มต้นของ pipeline เหมือนกับแบบฝึกหัดก่อนหน้า:
cut -d , -f 2 seasonal/winter.csv | grep -v Tooth
ต่อด้วยคำสั่ง sort แล้วใช้ uniq -c เพื่อแสดงบรรทัดที่ไม่ซ้ำพร้อมจำนวนครั้งที่ปรากฏ แทนการใช้ uniq และ wc แยกกัน
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำจริง
เปลี่ยนทฤษฎีให้เป็นการลงมือทำด้วยแบบฝึกหัดเชิงโต้ตอบหนึ่งในของเรา
เริ่มแบบฝึกหัด