합리적인 확장성 제한은 무엇입니까 sort -u
? ("줄 길이", "줄 수", "총 파일 크기" 단위)
"줄 수"가 이 크기를 초과하는 파일에 대한 Unix 대안은 무엇입니까?
물론 쉽게 구현할 수 있지만, 아주 적은 수의 표준 Linux 명령으로 수행할 수 있는 작업이 있는지 궁금합니다.
답변1
이것은 sort
에서 비롯됩니다핵심 도구캡슐화하고 구현외부 R-Way 병합. 데이터를 메모리에서 처리할 수 있는 단위로 분할하고 디스크에 저장한 다음 병합합니다. 머신에 해당 프로세서가 있는 경우 이러한 블록은 병렬로 완료됩니다.
따라서 제한이 있는 경우 sort
결과와 함께 병합되어야 하는 임시 파일을 저장하는 데 사용 가능한 디스크 공간입니다.
답변2
공급업체별 구현에 대해서는 말할 수 없지만 구현 UNIX sort
에서는 큰 파일을 작은 파일로 분할하고 해당 파일을 정렬한 다음 정렬된 작은 파일을 집계된 정렬 출력으로 결합합니다.
유일한 제한은 중간에 생성되는 작은 파일을 위한 디스크 공간이지만 sort
환경 변수를 설정하여 파일을 임의의 디렉터리로 리디렉션할 수 있습니다 TMPDIR
.
답변3
기반으로https://blog.mafr.de/2010/05/23/sorting-large-files/그리고https://unix.stackexchange.com/a/88704/9689:
split -n l/20 input input-
for inpf in input-* ; do
sort --parallel="$(nproc --all)" "${inpf}" > sorted-"{$inpf}"
done
sort -m sorted-input-* > sorted-input
고쳐 쓰다:
위의 답변에서 sort
언급된 스니펫이 완료되었음을 알 수 있습니다.외부 R-Way 병합. 따라서 모든 실행 후에는 다음과 같습니다.
sort --parallel="$(nproc --all)" -u input > output
그 정도면 충분합니다.
코드를 확인하지 않고 제한에 대한 현재 가정은 다음과 같습니다.
- 최대 행 길이는 실제 메모리 양에 따라 제한됩니다. 정렬하려면 메모리에 최소 2개를 넣어야 합니다.
- 행 수 - 모르겠습니다
- 파일 크기 - 물론 파일 시스템에 따라 결정됩니다.
- 병렬로 열리는 파일 수 - 운영 체제에 따라 다릅니다(감사합니다.디오메데스 스피넬리스이것을 지적하세요! )
(이 답변은 태그되었습니다.커뮤니티 위키- 개선할 수 있도록 격려해 주세요! :) )