जवाबों:
"--फिल्टर" का प्रयोग करें:
split --bytes=1024M --filter='gzip > $FILE.gz' /path/to/input /path/to/output
सशर्त का उपयोग करने वाला एक-लाइनर उतना ही करीब है जितना आप आ सकते हैं।
cd /path/to/output && split --bytes=1024M /path/to/input/filename && gzip x*
gzip
केवल तभी चलेगा जब split
सशर्त &&
जो सफल है cd
और split
जो सुनिश्चित कर रहा cd
है के बीच भी सफल है, भी .. नोट करें कि आउटपुट निर्देशिका को निर्दिष्ट करने की क्षमता रखने के बजाय वर्तमान निर्देशिका में split
और gzip
आउटपुट करें। यदि आवश्यक हो तो आप निर्देशिका बना सकते हैं:
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
पिग के साथ मक्खी पर संपीड़ित करने के लिए एक बैश फ़ंक्शन
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}
}
--line-bytes=1024M
।