เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

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

คำสั่งที่มักใช้คู่กับ 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 แยกกัน

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำจริง

เปลี่ยนทฤษฎีให้เป็นการลงมือทำด้วยแบบฝึกหัดเชิงโต้ตอบหนึ่งในของเรา

เริ่มแบบฝึกหัด