নির্দিষ্ট আকার এবং সংরক্ষণের লাইনের সাহায্যে ছোট ফাইলগুলিকে বড় আকারে মার্জ করুন


0

আমি "লাইন-ভিত্তিক" সামগ্রী সহ একগুচ্ছ ফাইল পেয়েছি। তাদের বিভিন্ন আকার রয়েছে তবে একই আকারের সাথে আমার প্রচুর ফাইল দরকার।

আমি কি পেয়েছিলাম:

  • ফাইল 1, 70 লাইন, 5 এমবি
  • ফাইল 2, 113 লাইন, 15 এমবি

আমি যা চাই:

  • ফাইল 1, 10 এমবি
  • ফাইল 2, 10 এমবি

আমি ফাইলগুলি একত্রিত করার এবং তাদের "বিভাজন" কমান্ড দিয়ে বিভক্ত করার বিষয়ে চেষ্টা করব না - তবে স্প্লিট ব্যবহার করার সময় এটি লাইনগুলি ভেঙে দেয় - তবে আমার লাইনগুলি সংরক্ষণ করতে হবে এবং লাইন ব্রেক পরে কেবল বিভক্ত হওয়া দরকার। "বিভক্ত" কমান্ড লাইন ভিত্তিক ব্যবহার কাজ করবে না, কারণ একক লাইনের আকার অনেক বেশি পৃথক।


1
যদি লাইনটির আকারগুলি অনেক পরিবর্তন হয়, তবে দয়া করে এই প্রশ্নের উত্তর দিন: আপনার কাছে যদি একটি লাইন থাকে যা ফাইলটি 10239 কেবি বড় করে তোলে (মাত্র 10 এমবি এর নীচে) এবং যুক্ত লাইনটি 10241 কেবি (মাত্র 10 এমবি এর বেশি) করে তোলে, আপনি লাইনটি অন্তর্ভুক্ত করতে চান না?
মাস্টার-গাই

ফাইলটি 10MB এর চেয়ে বড় হলে এটি আরও ভাল - সুতরাং আমি লাইনটি অন্তর্ভুক্ত করাতে চাই
পাস্কাল্টুর্বো

উত্তর:


0

এটি দ্রুততম নয় তবে আপনি যা বলেছিলেন তা করে:

#!/bin/bash
minimumsize=10000
actualsize=0
infile=$(basename "$1")
filenum=1
outdir=/home/user/bin/testing/tmp
outfile=$infile.out$filenum

if [ ! -f "$outdir/$outfile" ]; then
    mkdir -p "`dirname \"$outdir/$outfile\"`" 2>/dev/null
fi

while read line
do
    if [ $actualsize -ge $minimumsize ]; then
        (( filenum++ ))
        outfile=$infile.out$filenum
        if [ ! -f "$outdir/$outfile" ]; then
            mkdir -p "`dirname \"$outdir/$outfile\"`" 2>/dev/null
        fi
    fi
    echo $line >> $outdir/$outfile
    actualsize=$(wc -c "$outdir/$outfile" | cut -f 1 -d ' ')
done < $1

সেট minimumsizeএবং outdirভেরিয়েবল তারপর আপনি যে ফাইলটি লাইন বা আকার দ্বারা বিভক্ত করতে চান পাথ সঙ্গে এটি কল।

আমি নিশ্চিত যে এটি করার জন্য একটি কমান্ড রয়েছে যা তত দ্রুত।


0

একটি ছোট শেল স্ক্রিপ্ট সমস্যার সমাধান করা উচিত।

#!/bin/bash
file="part"
ext=".txt"
n=1
while read line
do
  fname=$file$n$ext
  echo $line >> $fname
  bytes=`wc -c $fname | cut -f1 -d' '`
  if [ $bytes -ge 10485760 ]
  then
    n=$((n+1))
  fi
done < input.txt

input.txtআপনার ইনপুট ফাইল ও স্ক্রিপ্ট মত আউটপুট উত্পাদন করা উচিত part1.txt, part2.txt, part3.txt... এটা প্রতিটি থাকার ~ 10 MB- তথ্য।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.