큰 단어 목록을 중복 제거해야합니다. 나는 몇 가지 명령을 시도하고 여기 와 여기 에서 단어 목록을 중복 제거하는 가장 빠른 방법이 awk를 사용하는 것으로 설명하는 곳에서 조사 했습니다 .
awk-> O (n)? sort-> O (n log n)?
그러나 이것이 사실이 아닌 것으로 나타났습니다. 내 테스트 결과는 다음과 같습니다.
sort -u input.txt -o output.txt
실제 0m12.446s
사용자 0m11.347s
시스템 0m0.906s
awk '!x[$0]++' input.txt > output.txt
실제 0m47.221s
사용자 0m45.419s
sys 0m1.260s
따라서 sort -u를 사용하면 3.7 배 더 빠릅니다. 왜 이런거야? 중복 제거를 수행하는 더 빠른 방법이 있습니까?
*********** 업데이트 ********
누군가가 의견에서 지적했듯이 내 단어 목록이 이미 어느 정도 정렬되어있을 수 있습니다. 이 가능성을 배제하기 위해이 파이썬 스크립트를 사용하여 두 개의 단어 목록을 생성했습니다 .
List1 = 7 Mb
List2 = 690 Mb
결과 AWK :
List1
실제 0m1.643s
사용자 0m1.565s
sys 0m0.062s
List2
실제 2m6.918s
사용자 2m4.499s
sys 0m1.345s
결과 SORT :
List1
실제 0m0.724s
사용자 0m0.666s
sys 0m0.048s
List2
실제 1m27.254s
사용자 1m25.013s
sys 0m1.251s