Büyük bir kelime listesini tekilleştirmem gerekiyor. Birkaç komut denedim ve Linux'taki en hızlı `` uniq '' aracında biraz araştırma yaptım ve büyük bir çoklu GB metin dosyasında yinelenen satırları nasıl kaldırabilirim? bir kelime listesini tekilleştirmenin en hızlı yolunun kullanıldığını açıklıyorlar awk
.
awk --> O(n) ? sort --> O(n log n) ?
Ancak bunun doğru olmadığını gördüm. İşte test sonuçlarım:
time sort -u input.txt -o output.txt
real 0m12.446s
user 0m11.347s
sys 0m0.906s**
time awk '!x[$0]++' input.txt > output.txt
real 0m47.221s
user 0m45.419s
sys 0m1.260s
Yani kullanmak sort -u
3,7 kat daha hızlı. Bu neden? Tekilleştirme yapmak için daha hızlı bir yöntem var mı?
*********** Güncelleme ********
Birinin yorumlarda belirttiği gibi, kelime listemin zaten bir dereceye kadar sıralanmış olması olabilir. Bu olasılığı hariç tutmak için random_number_wordlist_generator.py kullanarak iki kelime listesi oluşturdum .
List1 = 7 Mb
List2 = 690 Mb
**Results AWK:**
***List1***
real 0m1.643s
user 0m1.565s
sys 0m0.062s
***List2***
real 2m6.918s
user 2m4.499s
sys 0m1.345s
**Results SORT:**
***List1***
real 0m0.724s
user 0m0.666s
sys 0m0.048s
***List2***
real 1m27.254s
user 1m25.013s
sys 0m1.251s