파일을 분할하고 직접 압축하는 방법?


13

100GB 파일을 가지고 있으며 각각 1GB 파일 100 개로 나누고 싶습니다 (줄 바꿈)

예 :

split --bytes=1024M /path/to/input /path/to/output

생성 된 100 개의 파일에 대해 각 파일에 gzip / zip을 적용하고 싶습니다.

단일 명령을 사용할 수 있습니까?


2
파일 당 최대 1GB의 경우 (다음 줄이 파일을 넘기지 않는 경우) 사용하십시오 --line-bytes=1024M.
Brian

답변:


31

"-필터"를 사용하십시오.

split --bytes=1024M --filter='gzip > $FILE.gz' /path/to/input /path/to/output


이것은 나를 위해 바보가 아니며 $ FILE이 정의되지 않았고 des 폴더에 쓰지 않는 것과 동일한 파일을 계속 덮어 씁니다.
splaisan

내 실수, $ FILE을 바꾸려면 작은 따옴표가 필요하고 큰 실수, 사과하고 도움을 주셔서 감사합니다.이 마지막 명령은 4 줄의 블록으로 제공되는 fastq 데이터를 저장하는 데 효과적이었습니다. 'zcat ERR3152365.fastq.gz | split -a 3 -d -l 1200000-숫자 접미어 --filter = 'pigz -p 8> $ FILE.fq.gz'-splitout / part_ '
splaisan

0

조건부를 사용하는 원 라이너는 가능한 한 가깝습니다.

cd /path/to/output && split --bytes=1024M /path/to/input/filename && gzip x*

gzip경우에만 실행됩니다 split때문에 조건의 성공 &&사이도 cd하고 split하고 있는지 cd입니다 성공, 너무 .. 참고 splitgzip출력 대신 출력 디렉토리를 지정하는 기능을 갖는 현재 디렉토리로 이동합니다. 필요한 경우 디렉토리를 만들 수 있습니다.

mkdir -p /path/to/output && cd /path/to/output && split --bytes=1024M /path/to/input/filename && gzip x*

다시 정리하려면 :

gunzip /path/to/files/x* && cat /path/to/files/x* > /path/to/dest/filename

0

이 명령을 -d옵션 과 함께 사용하면 숫자 접미사를 생성 할 수 있습니다.

split -d -b 2048m "myDump.dmp" "myDump.dmp.part-" && gzip myDump.dmp.part*

생성 된 파일 :

    myDump.dmp.part-00
    myDump.dmp.part-01
    myDump.dmp.part-02
    ...

0

pigz로 즉시 압축하는 bash 함수

function splitreads(){

# add this function to your .bashrc or alike
# split large compressed read files into chunks of fixed size
# suffix is a three digit counter starting with 000
# take compressed input and compress output with pigz
# keeps the read-in-pair suffix in outputs
# requires pigz installed or modification to use gzip

usage="# splitreads <reads.fastq.gz> <reads per chunk; default 10000000>\n";
    if [ $# -lt 1 ]; then
        echo;
        echo ${usage};
        return;
    fi;

# threads for pigz (adapt to your needs)
thr=8

input=$1

# extract prefix and read number in pair
# this code is adapted to paired reads
base=$(basename ${input%.f*.gz})
pref=$(basename ${input%_?.f*.gz})
readn="${base#"${base%%_*}"}"

# 10M reads (4 lines each)
binsize=$((${2:-10000000}*4))

# split in bins of ${binsize}
echo "# splitting ${input} in chuncks of $((${binsize}/4)) reads"

cmd="zcat ${input} \
  | split \
    -a 3 \
    -d \
    -l ${binsize} \
    --numeric-suffixes \
    --additional-suffix ${readn} \
    --filter='pigz -p ${thr} > \$FILE.fq.gz' \
    - ${pref}_"

echo "# ${cmd}"
eval ${cmd}
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.