Bagaimana cara menghapus duplikat baris dalam filefile multi-GB yang besar?


16

Pertanyaan saya mirip dengan pertanyaan ini tetapi dengan beberapa kendala yang berbeda:

  • Saya memiliki \ndaftar kata terbatas besar - satu kata per baris. Ukuran file berkisar dari 2GB hingga 10GB.
  • Saya perlu menghapus garis duplikat.
  • Proses dapat mengurutkan daftar selama menghapus duplikat tetapi tidak diperlukan.
  • Ada cukup ruang pada partisi untuk membuat daftar kata unik yang baru dikeluarkan.

Saya telah mencoba kedua metode ini tetapi keduanya gagal tanpa kesalahan memori.

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)

Pendekatan apa lagi yang bisa saya coba?


Lihatlah solusi menggunakan awk unix.stackexchange.com/a/30178/56820
ezdazuzena

Jawaban:


18

Coba gunakan sortir dengan opsi -o/ --output=FILEalih-alih mengarahkan ulang output. Anda juga dapat mencoba mengatur buffer-sizedengan -S/ --buffer-size=SIZE. Juga, coba -s/ --stable. Dan baca halaman manual, ia menawarkan semua info yang saya berikan.

Perintah lengkap yang dapat Anda gunakan yang mungkin bekerja untuk apa yang Anda lakukan:

sort -us -o wordlist_unique.lst wordlist.lst

Anda mungkin juga ingin membaca URL berikut:

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

Itu lebih menyeluruh menjelaskan semacam daripada halaman manual.


terima kasih atas sarannya, sayangnya menggunakan --output masih tidak memperbaiki kesalahan memori. Menjalankan itu masih memberi saya sort: write failed: /root/tmp/sortVxscLn: No space left on device. Masalahnya agak menjengkelkan karena tidak langsung gagal. Sepertinya Anda harus menunggu hingga memori habis sebelum kesalahan keluar.
greatwolf

8
@ Viktor T .: Itu bukan kesalahan memori, tapi kesalahan ruang disk. Apakah / root pada sistem file yang berbeda dengan data Anda? Jika demikian, gunakan opsi -T / - direktori-temporer sortuntuk menggunakan sistem file dengan lebih banyak ruang kosong.
camh

@camh terima kasih sudah berhasil. Tidak menyadari bahwa Anda dapat menentukan buffer perantara mana yang akan digunakan.
greatwolf
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.