এই শেল স্ক্রিপ্টটি চেষ্টা করুন:
for f in *Rep1.bed
do
cat "${f%Rep1.bed}"*.bed >"$f.merged"
done
কিভাবে এটা কাজ করে
আপনার উদাহরণে প্রতিটি পরীক্ষার একটি ফাইল যার নাম শেষ হয়েছে Rep1.bed
। যে পরীক্ষা সব ফাইল খুঁজে পেতে, আমরা glob ব্যবহার করতে পারেন ${f%Rep1.bed}"*.bed
। তারপর যারা ফাইল একটি একক ফাইল সংকলিত করা হয়। এই প্রতিটি পরীক্ষা জন্য পুনরাবৃত্তি করা হয়।
ফর্ম ${f%Rep1.bed}
প্রত্যয় অপসারণের একটি উদাহরণ। এটা পরিবর্তনশীল লাগে f
এবং অনুসরণ করে যে প্যাটার্ন যে কোন ঘটনার শেষ থেকে মুছে ফেলা হয় %
চিহ্ন. উদাহরণস্বরূপ, একটি শেল ভেরিয়েবল তৈরি করা যাক:
$ f=ExperimentC_Rep2.bed
$ echo "${f}"
ExperimentC_Rep2.bed
এখন, এর অপসারণ করা যাক .bed
শেষ থেকে
$ echo "${f%.bed}"
ExperimentC_Rep2
অথবা, আমরা এখানে প্রয়োজন হিসাবে, আমরা একটি দীর্ঘ স্ট্রিং মুছে ফেলতে পারেন Rep2.bed
:
$ echo "${f%Rep2.bed}"
ExperimentC_
উপরে উল্লিখিত কি প্রতিলিপি নম্বর মুছে ফেলা সঙ্গে পরীক্ষা নাম। আমরা গ্লোবাল ব্যবহার করে এই পরীক্ষামূলক নামের সাথে যুক্ত সমস্ত প্রতিলিপি ফাইল নির্বাচন করতে ব্যবহার করতে পারি "${f%Rep1.bed}"*.bed
একটি লাইন হিসাবে
যখন কোডটি ইন্টারেক্টিভ চালানো হয়, এটি একটি একক লাইন হিসাবে এটি চালানো কখনও কখনও সহজ হয়। উপরের কোডটি, একটি লাইন হিসাবে, হল:
for f in *Rep1.bed; do cat "${f%Rep1.bed}"*.bed >"$f.merged"; done
2 অথবা আরও প্রতিলিপি সঙ্গে পরীক্ষা জন্য শুধুমাত্র একটি মার্জ ফাইল তৈরি করা
কিছু পরীক্ষার মাত্র একটি প্রতিরূপ আছে ( *_Rep1.bed
)। অন্য অনেক আছে: _Rep1.bed
, _Rep2.bed
, .... যদি আমরা কেবল দুটি বা তার বেশি ফাইল নির্বাচন করতে চাই, তবে আমরা কেবলমাত্র সেই ফাইলগুলি নির্বাচন করতে পারি Rep2
বিদ্যমান:
for f in *Rep2.bed; do cat "${f%Rep2.bed}"*.bed >"$f.merged"; done
>>
চূড়ান্ত ফাইল বা ব্যবহার যোগ করুন>
পরেdone
? আমি এটা নিজে চালাইনি, কিন্তু আপনি এই দৃষ্টিভঙ্গির বিষয়ে আরও ব্যাখ্যা দিতে পারেন? আপনার উদাহরণটি প্রতিটি সময়ে একবার প্রতিটি ফাইলের মাধ্যমে যেতে পারে না যাতে "$ f.merged" প্রতিটি পাসে ওভাররাইট হয়ে যায়?