
저는 수만 개의 gzip으로 압축된 텍스트 파일을 가지고 있는데 각 파일은 이미 내부적으로 정렬되어 있습니다.
sort -m
압축을 풀고(사본 생성) 병합하는 데 사용하는 스크립트를 작성했습니다 .
모든 것이 잘 돌아가고 있었지만 성능을 향상시키려고 노력하는 동안 압축 해제 작업이 전체 실행 시간의 약 16-20%를 차지하는 것을 발견했습니다.
기본적으로 병합 작업은 전체 텍스트 파일을 반복적으로 스캔하여 16개의 파일을 한 번에 1개로 병합해야 합니다. 일반적으로 이로 인해 내가 보유한 데이터에 대한 전체 스캔이 약 4-5회 발생합니다. 압축을 풀면 실제로 추가 스캔이 추가됩니다.
50~100GB의 데이터를 통해 5~6회 스캔 중 1회를 절약하면 엄청난 절감 효과를 얻을 수 있습니다.
gunzip
sort
그래서 직접 출력 입력 (또는 다른 도구)을 사용하여 기본적으로 압축 해제 라운드와 병합의 첫 번째 라운드를 결합할 수 있는지 궁금해지기 시작했습니다 . 출력은 gzip으로 압축되지 않습니다.
이것이 가능한지 아는 사람 있나요? 이상적으로는 표준 도구를 사용하지만 요구 사항이 맞다면 타사 도구도 사용할 수 있습니다.
답변1
zcat
프로그램 (또는 )을 통해 gzip -cd
압축 해제된 데이터를 표준 출력에 쓸 수 있습니다 . 여기에서 bash의 프로세스 교체를 사용할 수 있습니다. 1.gz
는 숫자 1부터 3이고, a.gz
문자 a부터 c는 z.gz
숫자 4와 문자 d입니다.
$ sort -m <(zcat 1.gz) <(zcat a.gz) <(zcat z.gz)
1
2
3
4
a
b
c
d
귀하의 데이터가 좀 더 흥미로워지기를 바랍니다.