একটি সংকুচিত ফাইলে লাইন গণনা করুন


42

যদি আমার ইউনিক্সে একটি .gz ফাইল থাকে যার নির্দিষ্ট সংখ্যক লাইন থাকে। আমি কীভাবে ইউনিক্সে রেখাগুলি সঙ্কুচিত না করে গণনা করতে পারি।


সংরক্ষণাগারটি বের না করে আপনি লাইনগুলি গণনা করতে পারবেন না।
zoli2k

উত্তর:


60

ফাইলটি এখনও সংকুচিত থাকলে আপনি স্পষ্টতই নিউলাইনগুলি গণনা করতে পারবেন না।

তবে আপনি কোনও স্ট্রিমকে সংক্ষেপণ করতে পারেন এবং সেই স্ট্রিমের নতুন লাইনগুলি গণনা করতে পারেন, কখনও কখনও ডিস্কে (ডিসপ্রেসড) ফাইল না লিখে। এটি এমন কিছু হবে:

zcat file.gz | wc -l

ডেকম্প্রেস এবং বিড়ালের জন্য zcat, ওয়ার্ডকাউন্টের জন্য ডাব্লুসিটি। আপনি আরও জানতে চাইলে উভয়ের জন্য ম্যান পেজগুলি দেখুন।

সম্পাদনা

যদি আপনার কাছে জ্যাক্যাট না থাকে তবে zcat এর অন্য একটি নাম gunzip -c


7
ইউনিসে যেখানে gzipপৃথক compress, আপনি চান gzcat
কনস্লেয়ার


5

আপনি যদি এটি দ্রুত করতে চান তবে আমি 'পিগজ' ব্যবহার করার পরামর্শ দিচ্ছি (যা আইআইআরসি "জিজেপের সমান্তরাল বাস্তবায়ন")। আমার ঠিক একইরকম পরিস্থিতি হয়েছিল যেখানে আমি একগুচ্ছ gzip'ed ফাইলের লাইন সংখ্যা গণনা করতে চেয়েছিলাম এবং এখানে আমার সমাধানটি ছিল:

for x in *.gz; do unpigz -p 8 -c $x | wc -l && echo $x; done

যা আমাকে 8 টি প্রসেসরের সাহায্যে বিকল্প রেখাগুলিতে লাইন সংখ্যা এবং ফাইলটিকে গণনা করেছে। তাড়াতাড়ি ছুটে গেল!


1
বা যদি আনপিগগুলি উপলভ্য না হয় তবে কেবলfor x in *.fastq.gz; do zcat "$x" | wc -l && echo $x; done
ক্যালিমো

2

এই আদেশটি ব্যবহার করুন:

gzgrep -c $ filename.gz

কমান্ডটি gzgrepজিজেপ grepসংক্ষেপিত ফাইলগুলির মতো একই আচরণ করে । এটি রেজেক্স ম্যাচের জন্য ফ্লাইতে ফাইলটি সংক্ষেপিত করে।

এই ক্ষেত্রে -cকমান্ডটি মিলিয়ে যাওয়া লাইনগুলির আউটপুট সংখ্যার নির্দেশ দিন এবং রেজেক্স $লাইনের শেষের সাথে মেলে তাই এটি প্রতিটি লাইন বা ফাইলের সাথে মেলে।

চূড়ান্ত ফলাফল অনুরূপ gzip -dc filename.gz | grep -c $


কি gzgrepসোলারিস ছাড়া অন্য সিস্টেমে পাওয়া যায়?
পাবউক

1
না। অন্যান্য সিস্টেমে কমান্ডটি zgrep -c $ filename.gz হবে
রবি কেএম

1
যদিও কেউ স্বজ্ঞাতভাবে বিবেচনা করতে পারেন যে এটি zcat + wc এর চেয়ে ভাল, আমি যখন তাদের সময় দিই, তারা একই পরিমাণে সময় নেয়।
ngọcminh.oss

1

আপনি যদি সঠিক গণনার চেয়ে মোটামুটি অনুমানের সাথে ঠিক থাকেন এবং আসলে পুরো ফাইলটি বের করে নেওয়া বা লাইন শেষের জন্য 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)যতক্ষণ না আপনার লাইন প্রতি ডেটা মোটামুটি একজাতীয় হয়।


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