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


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.