ไฟล์ข้อความขนาดใหญ่ (มากถึง 2 GiB) ของฉันมีข้อมูลที่ซ้ำกันประมาณ 100 รายการทุกบรรทัดในนั้น (ไร้ประโยชน์ในกรณีของฉันเนื่องจากไฟล์เป็นตารางข้อมูลที่เหมือน CSV)
สิ่งที่ฉันต้องการคือการลบการทำซ้ำทั้งหมดในขณะที่ (โดยเฉพาะอย่างยิ่ง แต่สิ่งนี้สามารถเสียสละเพื่อเพิ่มประสิทธิภาพที่สำคัญ) การรักษาลำดับเดิม ในผลลัพธ์แต่ละบรรทัดจะต้องไม่ซ้ำกัน หากมี 100 เส้นเท่ากัน (โดยปกติรายการที่ซ้ำกันจะกระจายไปทั่วไฟล์และจะไม่เป็นเพื่อนบ้าน) จะต้องมีเพียงหนึ่งในประเภทที่เหลือ
ฉันได้เขียนโปรแกรมใน Scala (พิจารณาเป็น Java ถ้าคุณไม่ทราบเกี่ยวกับ Scala) เพื่อดำเนินการนี้ แต่บางทีมีเครื่องมือดั้งเดิมที่เขียนด้วยภาษา C เร็วกว่าสามารถทำสิ่งนี้ได้เร็วขึ้น?
อัปเดต: awk '!seen[$0]++' filename
ดูเหมือนว่าโซลูชันจะทำงานได้ดีสำหรับฉันตราบใดที่ไฟล์อยู่ใกล้กับ 2 GiB หรือเล็กกว่า แต่ตอนนี้เมื่อฉันต้องล้างไฟล์ 8 GiB มันไม่ทำงานอีกต่อไป ดูเหมือนว่าจะไม่มีที่สิ้นสุดบน Mac ที่มี 4 GiB RAM และ 64-bit Windows 7 PC ที่มี 4 GiB RAM และ 6 GiB swap เพียงหน่วยความจำหมด และฉันไม่รู้สึกกระตือรือร้นกับการทดลองใช้บน Linux ด้วย 4 GiB RAM เนื่องจากประสบการณ์นี้
sort -u
อาจจะเร็วขึ้น