1. Learn
  2. /
  3. คอร์ส
  4. /
  5. Introduction to Shell

Connected

แบบฝึกหัด

จะลบบรรทัดที่ซ้ำกันได้อย่างไร?

คำสั่งที่มักใช้คู่กับ 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 ถูกออกแบบมาให้ทำงานกับไฟล์ขนาดใหญ่ หากต้องการลบบรรทัดที่ซ้ำกันแม้ไม่ได้อยู่ติดกัน ก็จำเป็นต้องเก็บข้อมูลทั้งไฟล์ไว้ในหน่วยความจำ (หรืออย่างน้อยก็ทุกบรรทัดที่ไม่ซ้ำที่เจอมาแล้ว) การลบเฉพาะบรรทัดที่ซ้ำกันติดต่อกันจึงช่วยให้ต้องเก็บเพียงบรรทัดล่าสุดที่ไม่ซ้ำไว้ในหน่วยความจำเท่านั้น

คำแนะนำ

100 XP

เขียน pipeline เพื่อ:

  • ดึงคอลัมน์ที่ 2 จาก seasonal/winter.csv
  • ลบคำว่า "Tooth" ออกจากผลลัพธ์ เพื่อแสดงเฉพาะชื่อฟัน
  • เรียงลำดับผลลัพธ์เพื่อให้ชื่อฟันที่เหมือนกันอยู่ติดกัน และ
  • แสดงชื่อฟันแต่ละชื่อหนึ่งครั้งพร้อมกับจำนวนครั้งที่ปรากฏ

จุดเริ่มต้นของ pipeline เหมือนกับแบบฝึกหัดก่อนหน้า:

cut -d , -f 2 seasonal/winter.csv | grep -v Tooth

ต่อด้วยคำสั่ง sort แล้วใช้ uniq -c เพื่อแสดงบรรทัดที่ไม่ซ้ำพร้อมจำนวนครั้งที่ปรากฏ แทนการใช้ uniq และ wc แยกกัน