คุณสามารถใช้คำสั่งsortกับตัวเลือก--unique:
sort -u input-file
หากคุณต้องการเขียนผลลัพธ์ไปที่ FILE แทนเอาต์พุตมาตรฐานให้ใช้ตัวเลือก--output=FILE:
sort -u input-file -o output-file
คำสั่งuniqยังสามารถนำไปใช้ ในกรณีนี้บรรทัดที่เหมือนกันต้องเป็นผลลัพธ์ดังนั้นข้อมูลจะต้องเรียงลำดับเบื้องต้น - ขอบคุณ@RonJohnสำหรับบันทึกนี้ :
sort input-file | uniq > output-file
ฉันชอบsortคำสั่งสำหรับกรณีที่คล้ายกันเพราะความเรียบง่าย แต่ถ้าคุณทำงานกับอาร์เรย์ขนาดใหญ่awkแนวทางจากคำตอบของ John1024 อาจมีประสิทธิภาพมากกว่า นี่คือการเปรียบเทียบเวลาระหว่างวิธีการที่กล่าวถึงซึ่งใช้กับไฟล์ (ตามตัวอย่างด้านบน) ที่มีเกือบ 5 ล้านบรรทัด:
$ cat input-file | wc -l
20000000
$ TIMEFORMAT=%R
$ time sort -u input-file | wc -l
64
7.495
$ time sort input-file | uniq | wc -l
64
7.703
$ time awk '!a[$0]++' input-file | wc -l # from John1024's answer
64
1.271
$ time datamash rmdup 1 < input-file | wc -l # from αғsнιη's answer
64
0.770
ความแตกต่างที่สำคัญอื่น ๆ คือที่@Ruslanกล่าวถึง:
sort -uจะพิมพ์ผลลัพธ์เมื่ออินพุตสิ้นสุดลงในขณะที่awkคำสั่งนี้จะพิมพ์แต่ละบรรทัดผลลัพธ์ใหม่ทันที (สิ่งนี้อาจสำคัญกว่าสำหรับอินพุต pip กว่าไฟล์)
นี่คือภาพประกอบ:

ในตัวอย่างด้านบนการวนซ้ำ (แสดงด้านล่าง) สร้างการผสมแบบสุ่ม 500 ชุดแต่ละชุดมีความยาวอักขระสามตัวของ AD ตัวอักษร รวมกันเหล่านี้จะประปาหรือawksort
for i in {1..500}; do cat /dev/urandom | tr -dc A-D | head -c 3; echo; done