약 2000개의 .txt 파일이 있습니다. 각 파일의 행 수는 500,000개 이하여야 합니다. 40GB 정도 됩니다.
모든 파일에는 단어가 포함되어 있으며 각 단어는 새 줄을 차지합니다. 일부 파일에는 다른 파일에 포함된 것과 동일한 단어(중복이라고도 함)가 포함될 수 있습니다. 따라서 모든 중복 항목을 제거하고 각 단어를 한 번만 유지해야 합니다.
모든 줄을 하나의 파일에 쓰고 awk 모드를 사용해 보았습니다. 이와 같이:
awk '!seen[$0]++' Documents/* > result.txt
그건 소용없어요. "메모리를 할당할 수 없습니다"라는 오류가 발생했습니다.
모든 것을 하나의 파일에 쓸 필요가 없습니다. 그리고, 고유한 행뿐만 아니라 5자 이상 101자 미만의 행도 선택할 수 있으면 좋을 것 같습니다. 8개의 VCPU와 30GB RAM이 있는 시스템에서 이 작업을 수행하려고 합니다.
어떤 제안이 있으십니까?
답변1
간단한
sort -u Documents/*.txt > result.txt
그것은 이루어져야합니다. sort
메모리보다 큰 파일을 처리하는 방법을 이미 알고 있으므로 awk에서 표시되는 메모리 부족 오류가 발생해서는 안 됩니다. awk에 메모리가 부족하다는 사실이 조금 놀랐다는 점을 인정해야 합니다. 32비트 응용 프로그램으로 컴파일되었습니까?
일반적으로 sort
이 방법을 사용하는 것보다 를 사용하는 것이 더 느릴 수 있습니다 awk '!seen[$1]++'
. 파일을 그룹으로 처리하여 속도를 회복할 수 있습니다.