Saya perlu menduplikat daftar kata yang besar. Saya mencoba beberapa perintah dan melakukan penelitian di sini dan di sini di mana mereka menjelaskan bahwa cara tercepat untuk mendeduplikasi daftar kata tampaknya menggunakan awk.
awk -> O (n)? sort - - O (n log n)?
Namun saya menemukan bahwa ini sepertinya tidak benar. Inilah hasil pengujian saya:
sort -u input.txt -o output.txt
pengguna 0m12.446 s nyata 0m11.347
sys 0m0.906s
awk '!x[$0]++' input.txt > output.txt
nyata 0m47.221s
0m45.419s pengguna
sys 0m1.260s
Jadi menggunakan sort -u adalah 3,7 kali lebih cepat. Kenapa ini? apakah ada metode yang lebih cepat untuk melakukan deduplikasi?
*********** Pembaruan ********
Seperti yang ditunjukkan oleh seseorang di komentar, bisa jadi daftar kata saya sudah diurutkan sampai batas tertentu. Untuk mengecualikan kemungkinan ini, saya membuat dua daftar kata menggunakan skrip python ini .
List1 = 7 Mb
List2 = 690 Mb
Hasil AWK:
List1
real 0m1.643s
pengguna 0m1.565s
sys 0m0.062s
List2
real 2m6.918s
pengguna 2m4.499s
sys 0m1.345s
Hasil SORT:
List1
nyata 0m0.724s
pengguna 0m0.666s
sys 0m0.048s
List2
real 1m27.254s
pengguna 1m25.013s
sys 0m1.251s