'sort -u'의 합리적인 확장 성 한계는 무엇입니까? ( "라인 길이", "라인 수", "총 파일 크기"의 차원)?
"라인 수"차원에서이를 초과하는 파일에 대한 Unix 대안은 무엇입니까? (물론 쉽게 구현할 수는 있지만 표준 Linux 명령으로 수행 할 수있는 작업이 있는지 궁금합니다.)
'sort -u'의 합리적인 확장 성 한계는 무엇입니까? ( "라인 길이", "라인 수", "총 파일 크기"의 차원)?
"라인 수"차원에서이를 초과하는 파일에 대한 Unix 대안은 무엇입니까? (물론 쉽게 구현할 수는 있지만 표준 Linux 명령으로 수행 할 수있는 작업이 있는지 궁금합니다.)
답변:
sort
Linux에서 찾을 수 있음은에서 온다 로 coreutils 패키지 구현하는 외부 R-방법 병합 . 데이터를 메모리에서 처리 할 수있는 청크로 분할하고 디스크에 저장 한 다음 병합합니다. 기계에 프로세서가 있으면 청크가 병렬로 수행됩니다.
따라서 제한 sort
이 있으면 병합해야하는 임시 파일을 결과와 함께 저장하는 데 사용할 수있는 디스크 여유 공간 이됩니다.
sort -o file file
)
공급 업체별 구현을 말할 수는 없지만 UNIX sort
구현시 큰 파일을 작은 파일로 분할하고 이러한 파일을 정렬 한 다음 정렬 된 작은 파일을 집계 된 정렬 된 출력으로 결합합니다.
유일한 제한 사항은 중간에 의해 생성 된 작은 파일의 디스크 공간 sort
이지만 환경 변수를 설정하여 임의의 디렉토리로 파일을 리디렉션 할 수 있습니다 TMPDIR
.
man largefile
나열 sort
합니다.
sort
있습니까? 아니면 AT & T Unix 버전의 파생물이 있습니까? 아니면 유닉스 인증 버전 sort
( sort
OS / X의 GNU와 같은 )이 있습니까?
sort
멀티 바이트 문자에 대한 최신 구현 의 품질 은 다양 할 수 있습니다. sort
분할 중간 파일 을 사용 한다는 사실 은 원래 코드를 기반으로하는 모든 UNIX 구현에 공통적입니다. BTW : Solaris 버전은 "OpenSolaris"로 OSS입니다. sourceforge.net/p/schillix-on/schillix-on/ci/default/tree/usr/…를
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
충분해야합니다.
한계에 대한 나의 현재 가정 (코드를 확인하지 않고)은 다음과 같습니다.
(이 답변은 커뮤니티 위키 로 표시되어 있습니다 -개선하도록 장려됩니다! :))
sort
는 기본적으로 병렬로 정렬합니다 (링크 한 페이지 이후 2010 년 이후) . 최적 --parallel
의 스레드를 sort
결정하는 대신 동시 스레드 수를 줄여야합니다 . 정렬은 이미보다 효율적인 방식으로 내부에서 분할 및 병합을 수행합니다. 여분의 분할을 수행하면 도움이 될 것입니다.