যদি আমার ইউনিক্সে একটি .gz ফাইল থাকে যার নির্দিষ্ট সংখ্যক লাইন থাকে। আমি কীভাবে ইউনিক্সে রেখাগুলি সঙ্কুচিত না করে গণনা করতে পারি।
যদি আমার ইউনিক্সে একটি .gz ফাইল থাকে যার নির্দিষ্ট সংখ্যক লাইন থাকে। আমি কীভাবে ইউনিক্সে রেখাগুলি সঙ্কুচিত না করে গণনা করতে পারি।
উত্তর:
ফাইলটি এখনও সংকুচিত থাকলে আপনি স্পষ্টতই নিউলাইনগুলি গণনা করতে পারবেন না।
তবে আপনি কোনও স্ট্রিমকে সংক্ষেপণ করতে পারেন এবং সেই স্ট্রিমের নতুন লাইনগুলি গণনা করতে পারেন, কখনও কখনও ডিস্কে (ডিসপ্রেসড) ফাইল না লিখে। এটি এমন কিছু হবে:
zcat file.gz | wc -l
ডেকম্প্রেস এবং বিড়ালের জন্য zcat, ওয়ার্ডকাউন্টের জন্য ডাব্লুসিটি। আপনি আরও জানতে চাইলে উভয়ের জন্য ম্যান পেজগুলি দেখুন।
সম্পাদনা
যদি আপনার কাছে জ্যাক্যাট না থাকে তবে zcat এর অন্য একটি নাম gunzip -c
।
gzip
পৃথক compress
, আপনি চান gzcat
।
এটিও কাজ করে বলে মনে হচ্ছে - ফাইলটিতে লাইন-শেষের সংখ্যার জন্য গ্রেপ
zgrep -Ec "$" file.gz
wc -l
আপনি যদি এটি দ্রুত করতে চান তবে আমি 'পিগজ' ব্যবহার করার পরামর্শ দিচ্ছি (যা আইআইআরসি "জিজেপের সমান্তরাল বাস্তবায়ন")। আমার ঠিক একইরকম পরিস্থিতি হয়েছিল যেখানে আমি একগুচ্ছ gzip'ed ফাইলের লাইন সংখ্যা গণনা করতে চেয়েছিলাম এবং এখানে আমার সমাধানটি ছিল:
for x in *.gz; do unpigz -p 8 -c $x | wc -l && echo $x; done
যা আমাকে 8 টি প্রসেসরের সাহায্যে বিকল্প রেখাগুলিতে লাইন সংখ্যা এবং ফাইলটিকে গণনা করেছে। তাড়াতাড়ি ছুটে গেল!
for x in *.fastq.gz; do zcat "$x" | wc -l && echo $x; done
এই আদেশটি ব্যবহার করুন:
gzgrep -c $ filename.gz
কমান্ডটি gzgrep
জিজেপ grep
সংক্ষেপিত ফাইলগুলির মতো একই আচরণ করে । এটি রেজেক্স ম্যাচের জন্য ফ্লাইতে ফাইলটি সংক্ষেপিত করে।
এই ক্ষেত্রে -c
কমান্ডটি মিলিয়ে যাওয়া লাইনগুলির আউটপুট সংখ্যার নির্দেশ দিন এবং রেজেক্স $
লাইনের শেষের সাথে মেলে তাই এটি প্রতিটি লাইন বা ফাইলের সাথে মেলে।
চূড়ান্ত ফলাফল অনুরূপ gzip -dc filename.gz | grep -c $
।
gzgrep
সোলারিস ছাড়া অন্য সিস্টেমে পাওয়া যায়?
আপনি যদি সঠিক গণনার চেয়ে মোটামুটি অনুমানের সাথে ঠিক থাকেন এবং আসলে পুরো ফাইলটি বের করে নেওয়া বা লাইন শেষের জন্য zgrepping করা উভয়ই অনেক বেশি সময় নিতে পারে (যা এখন আমার পরিস্থিতি ছিল) আপনি করতে পারেন:
zcat "$file" | head -1000 > 1000-line-sample.txt
ls -ls 1000-line-sample.txt "$file"
তারপরে আনুমানিক লাইন গণনাটি 1000 * (size of $file) / (size of 1000-line-sample)
যতক্ষণ না আপনার লাইন প্রতি ডেটা মোটামুটি একজাতীয় হয়।