Devo deduplicare un ampio elenco di parole. Ho provato diversi comandi e ho fatto alcune ricerche qui e qui in cui spiegano che il modo più veloce per deduplicare un elenco di parole sembra usare awk.
awk -> O (n)? ordina -> O (n registro n)?
Tuttavia ho scoperto che questo sembra non essere vero. Ecco i miei risultati dei test:
sort -u input.txt -o output.txt
reale 0m12.446s
utente 0m11.347s
sys 0m0.906s
awk '!x[$0]++' input.txt > output.txt
reale 0m47.221s
utente 0m45.419s
sys 0m1.260s
Quindi usare sort -u è 3,7 volte più veloce. Perchè è questo? esiste un metodo ancora più veloce per eseguire la deduplicazione?
*********** Aggiornare ********
Come qualcuno ha sottolineato nei commenti, potrebbe essere che la mia lista di parole fosse già stata ordinata in una certa misura. Per escludere questa possibilità ho generato due liste di parole usando questo script Python .
Elenco1 = 7 Mb
Elenco2 = 690 Mb
Risultati AWK:
List1
real 0m1.643s
user 0m1.565s
sys 0m0.062s
List2
reali 2m6.918s
utente 2m4.499s
sys 0m1.345s
ORDINA risultati:
List1
real 0m0.724s
user 0m0.666s
sys 0m0.048s
List2
reali 1m27.254s
utente 1m25.013s
sys 0m1.251s