วิธีค้นหาข้อมูลที่ซ้ำกันในไฟล์ข้อความ Linux ด้วย uniq

วิธีค้นหาข้อมูลที่ซ้ำกันในไฟล์ข้อความ Linux ด้วย uniq

คุณเคยเจอไฟล์ข้อความที่มีบรรทัดซ้ำและคำที่ซ้ำกันหรือไม่? บางทีคุณอาจทำงานกับเอาต์พุตคำสั่งเป็นประจำและต้องการกรองข้อมูลเหล่านั้นสำหรับสตริงที่แตกต่างกัน เมื่อพูดถึงไฟล์ข้อความและการลบข้อมูลที่ซ้ำซ้อนใน Linux คำสั่ง uniq คือทางออกที่ดีที่สุดของคุณ





ในบทความนี้ เราจะพูดถึงคำสั่ง uniq ในเชิงลึก พร้อมด้วยคำแนะนำโดยละเอียดเกี่ยวกับวิธีใช้คำสั่งเพื่อลบบรรทัดที่ซ้ำกันออกจากไฟล์ข้อความ





คำสั่ง uniq คืออะไร?

คำสั่ง uniq ใน Linux ใช้เพื่อแสดงบรรทัดที่เหมือนกันในไฟล์ข้อความ คำสั่งนี้จะมีประโยชน์หากคุณต้องการลบคำหรือสตริงที่ซ้ำกันออกจากไฟล์ข้อความ เนื่องจากคำสั่ง uniq ตรงกับบรรทัดที่อยู่ติดกันเพื่อค้นหาสำเนาที่ซ้ำซ้อน จึงใช้ได้กับไฟล์ข้อความที่เรียงลำดับเท่านั้น





โชคดีที่คุณสามารถไปป์ เรียงลำดับ คำสั่งด้วย uniq เพื่อจัดระเบียบไฟล์ข้อความในลักษณะที่เข้ากันได้กับคำสั่ง นอกเหนือจากการแสดงบรรทัดซ้ำ คำสั่ง uniq ยังสามารถนับการเกิดบรรทัดที่ซ้ำกันในไฟล์ข้อความ

วิธีใช้คำสั่ง uniq

มีตัวเลือกและแฟล็กต่างๆ ที่คุณสามารถใช้กับ uniq ได้ บางส่วนเป็นแบบพื้นฐานและดำเนินการอย่างง่าย เช่น การพิมพ์บรรทัดซ้ำ ในขณะที่บางรายการมีไว้สำหรับผู้ใช้ขั้นสูงที่มักทำงานกับไฟล์ข้อความบน Linux



ไวยากรณ์พื้นฐาน

ไวยากรณ์พื้นฐานของคำสั่ง uniq คือ:

uniq option input output

...ที่ไหน ตัวเลือก เป็นแฟล็กที่ใช้เรียกวิธีการเฉพาะของคำสั่ง ป้อนข้อมูล เป็นไฟล์ข้อความสำหรับการประมวลผลและ ผลผลิต เป็นพาธของไฟล์ที่จะเก็บเอาท์พุต





NS ผลผลิต อาร์กิวเมนต์เป็นทางเลือกและสามารถข้ามได้ หากผู้ใช้ไม่ได้ระบุไฟล์อินพุต uniq จะใช้ข้อมูลจากเอาต์พุตมาตรฐานเป็นอินพุต สิ่งนี้ทำให้ผู้ใช้สามารถไพพ์ uniq ด้วย คำสั่ง Linux อื่น ๆ .

ตัวอย่างไฟล์ข้อความ

เราจะใช้ไฟล์ข้อความ ซ้ำ.txt เป็นอินพุตสำหรับคำสั่ง





127.0.0.1 TCP
127.0.0.1 UDP
Do catch this
DO CATCH THIS
Don't match this
Don't catch this
This is a text file.
This is a text file.
THIS IS A TEXT FILE.
Unique lines are really rare.

โปรดทราบว่าเราได้จัดเรียงไฟล์ข้อความนี้โดยใช้เครื่องหมาย เรียงลำดับ สั่งการ. หากคุณกำลังทำงานกับไฟล์ข้อความอื่น คุณสามารถจัดเรียงไฟล์โดยใช้คำสั่งต่อไปนี้:

sort filename.txt > sorted.txt

ลบบรรทัดที่ซ้ำกัน

การใช้ uniq ขั้นพื้นฐานที่สุดคือการลบสตริงที่ซ้ำกันออกจากอินพุตและพิมพ์เอาต์พุตที่ไม่ซ้ำ

uniq duplicate.txt

เอาท์พุท:

ขอให้สังเกตว่าระบบไม่แสดงการเกิดขึ้นครั้งที่สองของบรรทัด นี่คือไฟล์ข้อความ . นอกจากนี้ คำสั่งดังกล่าวจะพิมพ์เฉพาะบรรทัดที่ไม่ซ้ำกันในไฟล์ และไม่ส่งผลต่อเนื้อหาของไฟล์ข้อความต้นฉบับ

นับเส้นซ้ำ

หากต้องการแสดงจำนวนบรรทัดซ้ำในไฟล์ข้อความ ให้ใช้ปุ่ม -ค ตั้งค่าสถานะด้วยคำสั่งเริ่มต้น

uniq -c duplicate.txt

เอาท์พุท:

ระบบแสดงจำนวนบรรทัดที่มีอยู่ในไฟล์ข้อความ จะเห็นว่าเส้น นี่คือไฟล์ข้อความ เกิดขึ้นสองครั้งในไฟล์ โดยดีฟอลต์ คำสั่ง uniq จะคำนึงถึงขนาดตัวพิมพ์

หากต้องการพิมพ์เฉพาะบรรทัดที่ซ้ำกันจากไฟล์ข้อความ ให้ใช้ปุ่ม -NS ธง. NS -NS หมายถึง ทำซ้ำ .

uniq -D duplicate.txt

ระบบจะแสดงผลดังนี้

This is a text file.
This is a text file.

ข้ามฟิลด์ขณะตรวจสอบรายการที่ซ้ำกัน

หากคุณต้องการข้ามฟิลด์จำนวนหนึ่งในขณะที่จับคู่สตริง คุณสามารถใช้ -NS ตั้งค่าสถานะด้วยคำสั่ง NS -NS หมายถึง สนาม .

พิจารณาไฟล์ข้อความต่อไปนี้ field.txt .

192.168.0.1 TCP
127.0.0.1 TCP
354.231.1.1 TCP
Linux FS
Windows FS
macOS FS

ในการข้ามฟิลด์แรก:

uniq -f 1 fields.txt

เอาท์พุท:

192.168.0.1 TCP
Linux FS

คำสั่งดังกล่าวข้ามฟิลด์แรก (ที่อยู่ IP และชื่อระบบปฏิบัติการ) และจับคู่คำที่สอง (TCP และ FS) จากนั้นจะแสดงการเกิดขึ้นครั้งแรกของแต่ละการแข่งขันเป็นผลลัพธ์

ละเว้นอักขระเมื่อเปรียบเทียบ

เช่นเดียวกับการข้ามฟิลด์ คุณสามารถข้ามอักขระได้เช่นกัน NS -NS ธงช่วยให้คุณระบุจำนวนอักขระที่จะข้ามไปในขณะที่จับคู่บรรทัดที่ซ้ำกัน คุณลักษณะนี้ช่วยเมื่อข้อมูลที่คุณกำลังใช้งานอยู่ในรูปแบบของรายการดังต่อไปนี้:

วิธีการหาประวัติของอาคาร
1. First
2. Second
3. Second
4. Second
5. Third
6. Third
7. Fourth
8. Fifth

การละเว้นอักขระสองตัวแรก (รายการลำดับเลข) ในไฟล์ list.txt :

uniq -s 2 list.txt

เอาท์พุท:

ในผลลัพธ์ด้านบน อักขระสองตัวแรกจะถูกละเว้น และอักขระที่เหลือจะถูกจับคู่สำหรับบรรทัดที่ไม่ซ้ำ

ตรวจสอบจำนวนอักขระ N ตัวแรกสำหรับรายการที่ซ้ำกัน

NS -ใน ธงช่วยให้คุณตรวจสอบเฉพาะจำนวนอักขระที่ซ้ำกันเท่านั้น ตัวอย่างเช่น:

uniq -w 2 duplicate.txt

คำสั่งดังกล่าวจะจับคู่กับอักขระสองตัวแรกเท่านั้น และจะพิมพ์บรรทัดที่ไม่ซ้ำ หากมี

เอาท์พุท:

ลบความไวของตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

ดังที่กล่าวไว้ข้างต้น uniq จะคำนึงถึงขนาดตัวพิมพ์ขณะจับคู่บรรทัดในไฟล์ หากต้องการละเว้นตัวพิมพ์ใหญ่ ให้ใช้ -ผม ตัวเลือกด้วยคำสั่ง

uniq -i duplicate.txt

คุณจะเห็นผลลัพธ์ต่อไปนี้

สังเกตในผลลัพธ์ด้านบน uniq ไม่แสดงบรรทัด จับสิ่งนี้ และ นี่คือไฟล์ข้อความ .

ส่งเอาต์พุตไปยังไฟล์

ในการส่งเอาต์พุตของคำสั่ง uniq ไปยังไฟล์ คุณสามารถใช้คำสั่ง การเปลี่ยนเส้นทางเอาต์พุต ( > ) อักขระดังต่อไปนี้:

uniq -i duplicate.txt > otherfile.txt

ขณะส่งเอาต์พุตไปยังไฟล์ข้อความ ระบบจะไม่แสดงเอาต์พุตของคำสั่ง คุณสามารถตรวจสอบเนื้อหาของไฟล์ใหม่ได้โดยใช้ปุ่ม แมว สั่งการ.

cat otherfile.txt

คุณยังสามารถใช้วิธีอื่นเพื่อ ส่งเอาต์พุตบรรทัดคำสั่งไปยังไฟล์ใน Linux .

การวิเคราะห์ข้อมูลที่ซ้ำกันด้วย uniq

ส่วนใหญ่ในขณะที่จัดการเซิร์ฟเวอร์ Linux คุณจะทำงานบนเทอร์มินัลหรือแก้ไขไฟล์ข้อความ ดังนั้น การรู้วิธีลบสำเนาบรรทัดที่ซ้ำซ้อนในไฟล์ข้อความจึงเป็นประโยชน์อย่างยิ่งต่อชุดทักษะ Linux ของคุณ

การทำงานกับไฟล์ข้อความอาจเป็นเรื่องที่น่าหงุดหงิดหากคุณไม่รู้วิธีกรองและจัดเรียงข้อความในไฟล์ เพื่อให้การทำงานของคุณง่ายขึ้น Linux มีคำสั่งแก้ไขข้อความหลายคำสั่งเช่น sed และ awk ที่ช่วยให้คุณทำงานอย่างมีประสิทธิภาพด้วยไฟล์ข้อความและเอาต์พุตบรรทัดคำสั่ง

แบ่งปัน แบ่งปัน ทวีต อีเมล ตัวอย่าง 10 Sed เหล่านี้จะทำให้คุณเป็นผู้ใช้ Linux Power

ต้องการเป็นผู้ใช้ระดับสูงของ Linux หรือไม่? การรับมือกับ sed จะช่วยได้ เรียนรู้จากตัวอย่าง 10 ตัวอย่างเหล่านี้

อ่านต่อไป
หัวข้อที่เกี่ยวข้อง
  • ลินุกซ์
  • ลินุกซ์
เกี่ยวกับผู้เขียน Deepesh Sharma(79 บทความที่ตีพิมพ์)

Deepesh เป็นบรรณาธิการรุ่นเยาว์สำหรับ Linux ที่ MUO เขาเขียนคู่มือข้อมูลบน Linux โดยมุ่งหวังที่จะมอบประสบการณ์อันแสนสุขแก่ผู้มาใหม่ทุกคน ไม่แน่ใจเกี่ยวกับภาพยนตร์ แต่ถ้าคุณต้องการพูดคุยเกี่ยวกับเทคโนโลยี เขาเป็นคนของคุณ ในเวลาว่าง คุณจะพบว่าเขาอ่านหนังสือ ฟังเพลงแนวต่างๆ หรือเล่นกีตาร์

เพิ่มเติมจาก Deepesh Sharma

สมัครรับจดหมายข่าวของเรา

เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!

คลิกที่นี่เพื่อสมัครสมาชิก