내 문제는 다음과 비슷합니다이 문제그러나 몇 가지 다른 제한 사항이 있습니다.
\n
한 줄에 한 단어씩 구분된 단어 목록이 많이 있습니다 . 파일 크기는 2GB에서 최대 10GB까지입니다.- 중복된 행을 제거해야 합니다.
- 프로세스는 중복 항목을 제거하는 동안 목록을 정렬할 수 있지만 필수는 아닙니다.
- 출력의 새 고유 단어 목록을 보관할 수 있는 충분한 공간이 파티션에 있습니다.
두 가지 방법을 모두 시도했지만 둘 다 메모리 부족 오류로 인해 실패했습니다.
sort -u wordlist.lst > wordlist_unique.lst
awk '!seen[$0]++' wordlist.lst > wordlist_unique.lst
awk: (FILENAME=wordlist.lst FNR=43601815) fatal: assoc_lookup: bucket-ahname_str: can't allocate 10 bytes of memory (Cannot allocate memory)
다른 어떤 방법을 시도해 볼 수 있나요?
답변1
-o
--output=FILE
출력을 리디렉션하는 대신 / 옵션을 사용하여 정렬을 사용해 보세요 . / buffer-size
로 -S
설정해 볼 수도 있습니다 --buffer-size=SIZE
. 또한 -s
/를 시도해 보세요 --stable
. 매뉴얼 페이지를 읽어보면 제가 제공한 모든 정보가 나와 있습니다.
현재 수행 중인 작업에 적합하게 사용할 수 있는 전체 명령은 다음과 같습니다.
sort -us -o wordlist_unique.lst wordlist.lst
다음 URL을 읽어볼 수도 있습니다.
http://www.gnu.org/s/coreutils/manual/html_node/sort-inspiration.html
이는 매뉴얼 페이지보다 정렬을 더 철저하게 설명합니다.