나는 대용량 파일을 원하며 다음을 수행합니다 data.txt
.
- 256m로 나누어져 있음
data.txt
각 분할 파일에 처음 3줄을 추가합니다.- 압축하다
data.txt
좋다:
aaa
bbb
ccc
<data>
<data>
<data>
...
<few million rows>
<data>
최종 결과는 각 분할 파일이 동일한 처음 3줄을 갖게 된다는 것입니다.
aaa
bbb
ccc
내가 아는 가장 효율적인 방법은 메모리에 있는 것입니다. 2단계를 종료하면 다음과 같습니다.
split --bytes=256M -d -a 3 --filter='gzip > $FILE.gz' data.txt split/data_
하지만 2단계에서는 파일을 디스크에 쓰기 위해 gzip을 별도의 명령으로 분할하지 않고 이 작업을 수행하는 방법을 잘 모르겠습니다.
답변1
필터를 더 복잡하게 만들 수 있습니다.
split -C 256M -d -a 3 --filter '(head -n 3 data.txt; cat) | gzip > $FILE.gz' <(tail -n +4 data.txt) data_
이렇게 하면 처음 세 행을 건너뛰고 data.txt
각 분할에 다시 도입합니다.
-C
대신 --bytes
분할 파일에 전체 레코드가 포함되어 있는지 확인하는 데 사용합니다 .