Çok büyük (en fazla 2 GiB) metin dosyası, içindeki her satırın yaklaşık 100 tam kopyasını içeriyor (benim durumumda, dosya CSV benzeri bir veri tablosu olduğu için işe yaramaz).
İhtiyacım olan, orijinal sıra sırasını koruyarak (tercihen, ancak önemli bir performans artışı için feda edilebilir) tüm tekrarları kaldırmak. Sonuçta her satır benzersiz olmaktır. 100 eşit satır olsaydı (genellikle kopyalar dosyaya yayılır ve komşular olmaz), geriye kalan türden yalnızca biri kalır.
Bunu uygulamak için Scala'da bir program yazdım (Scala'yı bilmiyorsanız Java düşünün). Ama belki daha hızlı yapmak için daha hızlı C-yazılı yerel araçlar vardır?
GÜNCELLEME: awk '!seen[$0]++' filename
dosyalar 2 GiB'ye yakın veya daha küçük olduğu sürece çözüm benim için gayet iyi görünüyordu ancak şimdi bir 8 GiB dosyasını temizleyeceğim için artık çalışmıyor. 4 GiB RAM ve 4 GiB RAM ve 6 GiB takas kullanan 64 bit Windows 7 PC Mac'te sonsuzluk alıyor gibi görünüyor. Ve bu deneyimi verilen 4 GiB RAM ile Linux üzerinde denemek için hevesli hissetmiyorum.
sort -u
muhtemelen daha hızlı olacak.