거대한 파일을위한 ‘sort -u’의 확장 성 “라인 길이”, “라인 수”, “총 파일

‘sort -u’의 합리적인 확장 성 한계는 무엇입니까? ( “라인 길이”, “라인 수”, “총 파일 크기”의 차원)?

“라인 수”차원에서이를 초과하는 파일에 대한 Unix 대안은 무엇입니까? (물론 쉽게 구현할 수는 있지만 표준 Linux 명령으로 수행 할 수있는 작업이 있는지 궁금합니다.)



답변

sortLinux에서 찾을 수 있음은에서 온다 로 coreutils 패키지 구현하는 외부 R-방법 병합 . 데이터를 메모리에서 처리 할 수있는 청크로 분할하고 디스크에 저장 한 다음 병합합니다. 기계에 프로세서가 있으면 청크가 병렬로 수행됩니다.

따라서 제한 sort이 있으면 병합해야하는 임시 파일을 결과와 함께 저장하는 데 사용할 수있는 디스크 여유 공간 이됩니다.


답변

공급 업체별 구현을 말할 수는 없지만 UNIX sort구현시 큰 파일을 작은 파일로 분할하고 이러한 파일을 정렬 한 다음 정렬 된 작은 파일을 집계 된 정렬 된 출력으로 결합합니다.

유일한 제한 사항은 중간에 의해 생성 된 작은 파일의 디스크 공간 sort이지만 환경 변수를 설정하여 임의의 디렉토리로 파일을 리디렉션 할 수 있습니다 TMPDIR.


답변

https://blog.mafr.de/2010/05/23/sorting-large-files//unix//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

충분해야합니다.

한계에 대한 나의 현재 가정 (코드를 확인하지 않고)은 다음과 같습니다.

  • 최대 라인 길이는 실제 메모리 양에 의해 제한됩니다. 적어도 두 개를 메모리에 맞출 필요
  • 줄의 양-나는 모른다
  • 파일 크기-물론 파일 시스템
  • 운영 체제에 따라 동시에 열린 파일 수 -Diomidis Spinellis 가 이것을 지적 해 주셔서 감사 합니다!

(이 답변은 커뮤니티 위키 로 표시되어 있습니다 -개선하도록 장려됩니다! :))


답변