কিভাবে একটি ফাইল বিভক্ত এবং সরাসরি সংকুচিত?


13

আমি একটি 100 গিগাবাইট ফাইল করেছি এবং আমি প্রতিটি 1 জিবি ফাইলের 100 টিতে বিভক্ত করতে চাই (লাইন ব্রেকের মাধ্যমে)

যেমন

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

উত্পাদিত 100 টি ফাইলের জন্য, আমি এই ফাইলগুলির প্রত্যেকটিতে gzip / zip প্রয়োগ করতে চাই।

একক কমান্ড ব্যবহার করা কি সম্ভব?


2
প্রতি ফাইল 1 জিবি অবধি (পরের লাইনটি এটি চাপিয়ে দিলে কম) ব্যবহার করুন --line-bytes=1024M।
— ব্রায়ান

উত্তর:


31

"- ফিল্টার" ব্যবহার করুন:

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


এটি আমার পক্ষে কাজ করে না, একই ফাইলটিকে rit ফাইল সংজ্ঞায়িত করা হয় না এবং এমনকি ডেস ফোল্ডারেও লিখে না overw
— splaisan

আমার ভুল, single ফাইলটি প্রতিস্থাপনের জন্য একক উদ্ধৃতি দরকার, আমার বড় ভুল, ক্ষমা এবং সহায়তার জন্য ধন্যবাদ: এই চূড়ান্ত কমান্ডটি 4 লাইনের ব্লকগুলিতে আসা ফ্যাশনক ডেটা সংরক্ষণ করার জন্য আমার পক্ষে কাজ করেছে: 'zcat ERR3152365.fastq.gz | বিভাজন -a 3 -d -l 1200000 - সংখ্যাসূচক-প্রত্যয় - ফিল্টার = 'পিগজ -p 8> ILE FILE.fq.gz' - স্প্লিটআউট / অংশ_ '
— স্প্লাইসান

0

শর্তসাপেক্ষ ব্যবহার করে একটি ওয়ান-লাইনার যতটা কাছে আসতে পারে ততই কাছাকাছি।

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

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

পিগজ সহ ফ্লাইতে সংকোচন করার জন্য একটি বাশ ফাংশন

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.