Pertanyaan saya mirip dengan pertanyaan ini tetapi dengan beberapa kendala yang berbeda:
- Saya memiliki
\n
daftar 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?
linux
text-processing
uniq
serigala besar
sumber
sumber
Jawaban:
Coba gunakan sortir dengan opsi
-o
/--output=FILE
alih-alih mengarahkan ulang output. Anda juga dapat mencoba mengaturbuffer-size
dengan-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:
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.
sumber
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.sort
untuk menggunakan sistem file dengan lebih banyak ruang kosong.