คุณเคยเจอไฟล์ข้อความที่มีบรรทัดซ้ำและคำที่ซ้ำกันหรือไม่? บางทีคุณอาจทำงานกับเอาต์พุตคำสั่งเป็นประจำและต้องการกรองข้อมูลเหล่านั้นสำหรับสตริงที่แตกต่างกัน เมื่อพูดถึงไฟล์ข้อความและการลบข้อมูลที่ซ้ำซ้อนใน 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 เป็นบรรณาธิการรุ่นเยาว์สำหรับ Linux ที่ MUO เขาเขียนคู่มือข้อมูลบน Linux โดยมุ่งหวังที่จะมอบประสบการณ์อันแสนสุขแก่ผู้มาใหม่ทุกคน ไม่แน่ใจเกี่ยวกับภาพยนตร์ แต่ถ้าคุณต้องการพูดคุยเกี่ยวกับเทคโนโลยี เขาเป็นคนของคุณ ในเวลาว่าง คุณจะพบว่าเขาอ่านหนังสือ ฟังเพลงแนวต่างๆ หรือเล่นกีตาร์
เพิ่มเติมจาก Deepesh Sharmaสมัครรับจดหมายข่าวของเรา
เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!
คลิกที่นี่เพื่อสมัครสมาชิก