Büyük bir çoklu GB metin dosyasındaki yinelenen satırlar nasıl kaldırılır?


16

Sorum bu soruya benzer, ancak birkaç farklı kısıtlamayla:

  • Büyük bir \nayrılmış kelime listem var - her satıra bir kelime. Dosya boyutu 2 GB ile 10 GB arasında değişir.
  • Yinelenen satırları kaldırmam gerekiyor.
  • İşlem, kopyaların kaldırılması sırasında listeyi sıralayabilir, ancak gerekli değildir.
  • Bölümde, yeni benzersiz sözcük listesini çıktı almak için yeterli alan var.

Bu yöntemlerin her ikisini de denedim ama ikisi de bellek hataları ile başarısız.

sort -u wordlist.lst > wordlist_unique.lst
awk '!seen[$0]++' wordlist.lst > wordlist_unique.lst
awk: (FILENAME=wordlist.lst FNR=43601815) fatal: assoc_lookup: bucket-ahname_str: can't allocate 10 bytes of memory (Cannot allocate memory)

Başka hangi yaklaşımları deneyebilirim?


Yanıtlar:


18

Çıktıyı yeniden yönlendirmek yerine -o/ --output=FILEseçeneğiyle sıralama kullanmayı deneyin . Ayrıca ayar deneyebilirsiniz buffer-sizeile -S/ ' --buffer-size=SIZE. Ayrıca, deneyin -s/ --stable. Ve adam sayfasını okuyun, verdiğim tüm bilgileri sunuyor.

Kullanabileceğiniz şey için kullanabileceğiniz tam komut:

sort -us -o wordlist_unique.lst wordlist.lst

Aşağıdaki URL'yi de okumak isteyebilirsiniz:

http://www.gnu.org/s/coreutils/manual/html_node/sort-invocation.html

Bu, sıralamayı adam sayfasından daha ayrıntılı olarak açıklar.


öneri için teşekkürler, ne yazık ki --output hala bellek yetersiz hatasını düzeltmez. Koşmak hala bana veriyor sort: write failed: /root/tmp/sortVxscLn: No space left on device. Sorun, hemen başarısız olmaması nedeniyle biraz sinir bozucu. Hata çıkmadan önce belleğin bitmesini beklemek zorundasınız gibi görünüyor.
greatwolf

8
@Victor T .: Bu bellek yetersiz hatası değil, disk yetersiz hatası. / Root verilerinizden farklı bir dosya sisteminde mi? Öyleyse, sortdaha fazla boş alana sahip bir dosya sistemini kullanmak için -T / - geçici dizin seçeneğini kullanın.
camh

@camh teşekkürler hile yaptı. Hangi ara tamponun kullanılacağını belirtebileceğinizi fark etmedim.
greatwolf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.