Tôi cần phải lặp lại một danh sách từ lớn. Tôi đã thử một số lệnh và thực hiện một số nghiên cứu ở đây và ở đây nơi họ giải thích rằng cách nhanh nhất để sao chép một danh sách từ dường như là sử dụng awk.
awk -> O (n)? sắp xếp -> O (n log n)?
Tuy nhiên tôi thấy rằng điều này dường như không đúng. Đây là kết quả thử nghiệm của tôi:
sort -u input.txt -o output.txt
người dùng thực 0m12.446s 0m11.347s
sys 0m0.906s
awk '!x[$0]++' input.txt > output.txt
thực 0m47.221s
0m45.419s dùng
sys 0m1.260s
Vì vậy, sử dụng sort -u nhanh hơn 3,7 lần. Tại sao lại thế này? Có một phương pháp thậm chí nhanh hơn để làm trùng lặp?
****** TÌM HIỂU
Như ai đó đã chỉ ra trong các bình luận, có thể là danh sách từ của tôi đã được sắp xếp ở một mức độ nào đó. Để loại trừ khả năng này, tôi đã tạo hai danh sách từ bằng cách sử dụng tập lệnh python này .
Danh sách1 = 7 Mb
Danh sách2 = 690 Mb
Kết quả AWK:
List1
thực 0m1.643s
người dùng 0m1.565s
sys 0m0.062s
List2
thực 2m6.918s
2m4.499s dùng
sys 0m1.345s
Kết quả SORT:
List1
thực 0m0.724s
người dùng 0m0.666s
sys 0m0.048s
List2
thực 1m27.254s
1m25.013s dùng
sys 0m1.251s