如何分割文件并直接压缩?


13

我有一个100GB的文件,我想分成100个1GB的文件(按换行符)

例如

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

对于生成的100个文件,我想将gzip / zip应用于每个文件。

是否可以使用单个命令?


2
每个文件最多可使用1GB(如果下一行将其放入,则减少)--line-bytes=1024M
布莱恩(Brian)

Answers:


31

使用“ --filter”:

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 --numeric-suffixes --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

将此命令与-doption一起使用可使您生成数字后缀。

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

一个bash函数可以使用Pigz快速压缩

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}
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.