Field এবং Record Handling (Field and Record Handling in AWK)
AWK একটি শক্তিশালী ভাষা যা টেক্সট প্রসেসিংয়ে বিশেষজ্ঞ। ফাইল বা ডেটা স্ট্রিমের প্রতিটি লাইনকে একটি রেকর্ড এবং প্রতিটি শব্দ বা টোকেনকে একটি ফিল্ড হিসেবে গণ্য করা হয়। AWK ব্যবহারকারীদের বিভিন্ন রেকর্ড এবং ফিল্ড পরিচালনা করতে দেয়, যা ডেটা বিশ্লেষণের সময় খুবই কার্যকর।
Field Handling
AWK প্রতিটি লাইনের ফিল্ডকে $ চিহ্ন ব্যবহার করে চিহ্নিত করে। উদাহরণস্বরূপ, $1 হল প্রথম ফিল্ড, $2 হল দ্বিতীয় ফিল্ড, ইত্যাদি। $0 পুরো লাইনের প্রতিনিধিত্ব করে।
উদাহরণ:
awk '{print $1, $3}' filename.txtএটি filename.txt ফাইলের প্রতিটি লাইনের প্রথম এবং তৃতীয় ফিল্ড প্রিন্ট করবে।
ফিল্ড বিভাজক (Field Separator)
AWK এ ডিফল্ট ফিল্ড বিভাজক (separator) হল স্পেস বা ট্যাব। তবে, ব্যবহারকারী চাইলে কাস্টম ফিল্ড বিভাজক নির্ধারণ করতে পারেন।
ফিল্ড বিভাজক নির্ধারণ:
ফিল্ড বিভাজক নির্ধারণ করার জন্য -F অপশন বা FS ভেরিয়েবল ব্যবহার করা হয়।
awk -F "," '{print $1, $2}' filename.csvএটি কমা (,) ব্যবহার করে ফিল্ড বিভাজক নির্ধারণ করে এবং filename.csv ফাইলের প্রথম ও দ্বিতীয় ফিল্ড প্রিন্ট করে।
awk 'BEGIN {FS="|"} {print $1, $3}' filename.txtএখানে পাইপ (|) ব্যবহার করে ফিল্ড বিভাজক নির্ধারণ করা হয়েছে।
Record Handling
AWK এ প্রতিটি লাইনকে একটি রেকর্ড হিসেবে গণ্য করা হয়। ডিফল্টভাবে, নতুন লাইন (newline) একটি রেকর্ডকে পৃথক করে। রেকর্ড বিভাজক RS ভেরিয়েবলের মাধ্যমে পরিবর্তন করা যায়।
রেকর্ড বিভাজক নির্ধারণ:
awk 'BEGIN {RS=" "} {print $1}' filename.txtএই কমান্ডটি filename.txt ফাইলের প্রতিটি শব্দকে আলাদা রেকর্ড হিসেবে গণ্য করে এবং প্রতিটি রেকর্ডের প্রথম ফিল্ড প্রিন্ট করে।
বিল্ট-ইন ভেরিয়েবলস
AWK এ কয়েকটি গুরুত্বপূর্ণ বিল্ট-ইন ভেরিয়েবল আছে যা ফিল্ড এবং রেকর্ড হ্যান্ডলিংয়ে সহায়তা করে:
- FS (Field Separator): ফিল্ড বিভাজক নির্ধারণ করে।
- RS (Record Separator): রেকর্ড বিভাজক নির্ধারণ করে।
- OFS (Output Field Separator): আউটপুট ফিল্ড বিভাজক নির্ধারণ করে।
- ORS (Output Record Separator): আউটপুট রেকর্ড বিভাজক নির্ধারণ করে।
- NF (Number of Fields): বর্তমান লাইনের মোট ফিল্ড সংখ্যা নির্দেশ করে।
- NR (Number of Records): বর্তমান পর্যন্ত প্রক্রিয়াকৃত রেকর্ডের সংখ্যা নির্দেশ করে।
উদাহরণ:
awk '{print "Line:", NR, "has", NF, "fields."}' filename.txtএই কমান্ডটি প্রতিটি লাইনের রেকর্ড নম্বর এবং ফিল্ডের সংখ্যা প্রিন্ট করবে।
Field এবং Record Handling এর ব্যবহার
Field এবং Record Handling ব্যবহার করে ব্যবহারকারীরা বিভিন্ন ধরনের ডেটা বিশ্লেষণ করতে পারেন, যেমন:
- CSV, TSV এবং অন্যান্য ডেলিমিটেড ফাইল থেকে নির্দিষ্ট কলাম বের করা।
- বড় টেক্সট ফাইল থেকে প্রয়োজনীয় তথ্য ফিল্টার করা।
- ডেটা বিশ্লেষণ এবং রিপোর্ট তৈরির জন্য কাস্টম আউটপুট তৈরি করা।
সারসংক্ষেপ
AWK এর Field এবং Record Handling ক্ষমতা ব্যবহারকারীদের ডেটা প্রক্রিয়াকরণ ও বিশ্লেষণে উচ্চ মাত্রার নিয়ন্ত্রণ প্রদান করে। ফিল্ড এবং রেকর্ড বিভাজক নির্ধারণের ক্ষমতা এটিকে বিভিন্ন ধরনের ডেটা ফরম্যাটের সাথে কাজ করার জন্য খুবই কার্যকর করে তোলে। AWK এর বিল্ট-ইন ভেরিয়েবলগুলো ব্যবহার করে ব্যবহারকারীরা ডেটা বিশ্লেষণ এবং রিপোর্টিং আরও কার্যকরভাবে করতে পারেন।
Field এবং Record কীভাবে প্রক্রিয়াকরণ করা হয়
AWK সহ বিভিন্ন প্রোগ্রামিং ভাষায় টেক্সট ডেটা প্রক্রিয়াকরণের সময়, ফাইল বা ইনপুট ডেটা সাধারণত ফিল্ড (Field) এবং রেকর্ড (Record) আকারে বিভক্ত করা হয়। এই বিভাজন ডেটা প্রক্রিয়াকরণকে আরও কার্যকরী করে তোলে। AWK-তে একটি রেকর্ড সাধারণত একটি লাইন হিসেবে ধরা হয়, এবং একটি লাইনের মধ্যে ফিল্ডগুলি স্পেস বা নির্দিষ্ট delimiter দিয়ে আলাদা করা হয়।
Field এবং Record এর সংজ্ঞা
- Field: একটি রেকর্ডের বিভিন্ন অংশ, যা delimiter দ্বারা পৃথক করা হয়। উদাহরণস্বরূপ, একটি লাইনের মধ্যে একাধিক শব্দ বা ডেটা উপাদান বিভিন্ন ফিল্ড হিসেবে বিবেচিত হয়।
- Record: একটি সম্পূর্ণ লাইন বা একটি ডেটা ইউনিট, যা সাধারণত newline চরিত্র (
\n) দ্বারা পৃথক করা হয়।
উদাহরণ:
ধরা যাক, একটি data.txt ফাইল আছে যার মধ্যে নিম্নলিখিত ডেটা রয়েছে:
Alice 25 Engineer
Bob 30 Designer
Charlie 28 Managerএখানে, প্রতিটি লাইন একটি রেকর্ড এবং প্রতিটি লাইনের পৃথক উপাদানগুলি (Alice, 25, Engineer) হল ফিল্ড।
AWK-তে Field এবং Record প্রক্রিয়াকরণ
AWK-তে ফিল্ডগুলি $ চিহ্ন দিয়ে উপস্থাপন করা হয়। $1, $2, $3 ইত্যাদি ব্যবহার করে আপনি প্রথম, দ্বিতীয়, তৃতীয় ফিল্ড ইত্যাদি নির্দিষ্ট করতে পারেন। পুরো রেকর্ডটি $0 দিয়ে উপস্থাপন করা হয়।
Field প্রক্রিয়াকরণ উদাহরণ:
awk '{ print $1 }' data.txtএই কমান্ডটি data.txt ফাইলের প্রতিটি লাইনের প্রথম ফিল্ড প্রিন্ট করবে। আউটপুট হবে:
Alice
Bob
CharlieMultiple Fields প্রিন্ট করা:
awk '{ print $1, $3 }' data.txtএই কমান্ডটি প্রতিটি লাইনের প্রথম এবং তৃতীয় ফিল্ড প্রিন্ট করবে। আউটপুট হবে:
Alice Engineer
Bob Designer
Charlie ManagerRecord প্রক্রিয়াকরণ
AWK ডিফল্টভাবে প্রতিটি লাইনকে একটি রেকর্ড হিসেবে গণ্য করে। তবে, আপনি কাস্টম delimiter ব্যবহার করে রেকর্ড পরিবর্তন করতে পারেন।
উদাহরণ:
ধরা যাক, একটি CSV ফাইল রয়েছে যার মধ্যে কোলন (:) দ্বারা ফিল্ড বিভক্ত:
Alice:25:Engineer
Bob:30:Designer
Charlie:28:Managerএই ফাইল প্রক্রিয়াকরণের জন্য AWK-তে -F ফ্ল্যাগ ব্যবহার করে delimiter নির্ধারণ করতে হবে:
awk -F ':' '{ print $1, $3 }' data.csvএই কমান্ডটি প্রথম এবং তৃতীয় ফিল্ড প্রিন্ট করবে। আউটপুট হবে:
Alice Engineer
Bob Designer
Charlie ManagerField Separator এবং Record Separator পরিবর্তন
AWK-তে FS (Field Separator) এবং RS (Record Separator) পরিবর্তন করে ফিল্ড এবং রেকর্ডের প্রক্রিয়াকরণ নিয়ন্ত্রণ করা যায়।
Field Separator পরিবর্তন:
awk 'BEGIN { FS=":" } { print $1, $2 }' data.csvএই কমান্ডে FS পরিবর্তন করে কোলন (:) দিয়ে ফিল্ড আলাদা করা হয়েছে।
Record Separator পরিবর্তন:
awk 'BEGIN { RS="\n\n" } { print $1 }' data.txtএই কমান্ডে RS পরিবর্তন করে দুটি newline দিয়ে রেকর্ড আলাদা করা হয়েছে।
সারসংক্ষেপ
AWK এবং অন্যান্য প্রোগ্রামিং ভাষায় Field এবং Record প্রক্রিয়াকরণ একটি অত্যন্ত কার্যকরী পদ্ধতি, যা ব্যবহারকারীদের ডেটা বিশ্লেষণ এবং ম্যানিপুলেশন করতে সহায়তা করে। AWK-তে $ চিহ্ন ব্যবহার করে নির্দিষ্ট ফিল্ড প্রক্রিয়াকরণ করা যায় এবং FS এবং RS এর মাধ্যমে ফিল্ড এবং রেকর্ড বিভাজন নিয়ন্ত্রণ করা সম্ভব। এই বৈশিষ্ট্যগুলি ডেটা প্রক্রিয়াকরণকে আরও শক্তিশালী এবং কার্যকর করে।
Field Separator (FS) এবং Record Separator (RS) এর ব্যবহার
AWK তে Field Separator (FS) এবং Record Separator (RS) হল দুটি গুরুত্বপূর্ণ উপাদান যা ডেটা প্রক্রিয়াকরণের সময় ইনপুট ডেটাকে বিভিন্ন ফিল্ড এবং রেকর্ডে ভাগ করতে ব্যবহৃত হয়। FS সাধারণত একটি লাইনের মধ্যে ফিল্ডগুলোকে আলাদা করার জন্য ব্যবহৃত হয় এবং RS বিভিন্ন লাইন বা রেকর্ডকে আলাদা করতে ব্যবহৃত হয়।
Field Separator (FS)
FS হল এমন একটি ভেরিয়েবল যা প্রতিটি লাইনের ফিল্ড বা কলামগুলোকে আলাদা করে। ডিফল্টভাবে, AWK তে FS একটি স্পেস বা ট্যাব হয়, কিন্তু এটি কাস্টমাইজ করা যেতে পারে।
FS এর ব্যবহার:
কমান্ড লাইনে -F ফ্ল্যাগ দিয়ে:
awk -F"," '{ print $1, $2 }' data.csvএখানে -F"," নির্দেশ করছে যে কমা (,) হল ফিল্ড সেপারেটর। ফলে data.csv ফাইলের প্রতিটি লাইনকে কমা দিয়ে ভাগ করা হবে।
প্রোগ্রামের মধ্যে FS পরিবর্তন:
awk 'BEGIN { FS = ":" }
{
print "First Field:", $1
print "Second Field:", $2
}' data.txtএখানে FS কলনের (:) মাধ্যমে প্রতিটি লাইনের ফিল্ডগুলোকে আলাদা করছে।
Record Separator (RS)
RS হল একটি ভেরিয়েবল যা বিভিন্ন রেকর্ড বা লাইনকে আলাদা করে। ডিফল্টভাবে, RS একটি নিউলাইন (অর্থাৎ প্রতিটি লাইন একটি রেকর্ড), তবে এটি কাস্টমাইজ করা যেতে পারে।
RS এর ব্যবহার:
প্রোগ্রামের মধ্যে RS পরিবর্তন:
awk 'BEGIN { RS = "" }
{
print "Record:", $0
}' paragraph.txtএখানে RS একটি খালি স্ট্রিং দিয়ে সেট করা হয়েছে, যা প্রতিটি প্যারাগ্রাফকে একটি রেকর্ড হিসেবে গণ্য করবে। এতে দুই লাইনের মধ্যে একটি ফাঁকা লাইন থাকলে সেটি রেকর্ড আলাদা করার সংকেত হিসেবে কাজ করবে।
কাস্টম রেকর্ড সেপারেটর ব্যবহার:
awk 'BEGIN { RS = "END" }
{
print "Record:", $0
}' document.txtএখানে RS কে "END" শব্দ দিয়ে সেট করা হয়েছে। ফলে, document.txt ফাইলের প্রতিটি রেকর্ড "END" শব্দটি দেখা পর্যন্ত গঠিত হবে।
উদাহরণ
নিচে একটি উদাহরণ দেওয়া হলো যেখানে FS এবং RS একসাথে ব্যবহার করা হয়েছে:
awk 'BEGIN { FS = ", "; RS = "\n\n" }
{
print "Record Start:"
print "First Field:", $1
print "Second Field:", $2
print "--------------------"
}' data.txtএখানে, প্রতিটি রেকর্ড দুইটি নিউলাইনের মাধ্যমে আলাদা করা হয়েছে এবং প্রতিটি ফিল্ড কমা এবং স্পেস (, ) দিয়ে আলাদা করা হয়েছে।
সারসংক্ষেপ
FS এবং RS AWK তে ডেটা প্রক্রিয়াকরণের জন্য গুরুত্বপূর্ণ উপাদান। FS ব্যবহারকারীদের ফিল্ড বা কলামগুলিকে সঠিকভাবে আলাদা করতে সাহায্য করে এবং RS বিভিন্ন রেকর্ড বা লাইন আলাদা করতে ব্যবহৃত হয়। এই ভেরিয়েবলগুলি কাস্টমাইজ করে ব্যবহারকারীরা তাদের ডেটা ফাইলের কাঠামো অনুসারে ডেটা প্রক্রিয়াকরণ করতে পারেন, যা ডেটা বিশ্লেষণকে আরও কার্যকর এবং ফলপ্রসূ করে।
AWK এ Multiple Delimiters এর ব্যবহার
AWK সাধারণত ফিল্ডগুলো আলাদা করতে স্পেস বা ট্যাব ব্যবহার করে, তবে প্রয়োজন অনুসারে একাধিক Delimiter ব্যবহার করা যায়। এটি ডেটা প্রসেসিংকে আরও সহজ এবং কার্যকর করে যখন আপনার ডেটা ফাইলটি একাধিক ধরনের Delimiter দ্বারা আলাদা থাকে। নিচে AWK এ Multiple Delimiters ব্যবহার করার বিভিন্ন পদ্ধতি এবং উদাহরণ দেওয়া হলো।
১. Multiple Delimiters সেট করা
AWK এ -F অপশন ব্যবহার করে Delimiter সেট করা যায়। একাধিক Delimiter ব্যবহার করার জন্য Regular Expression ব্যবহার করা হয়। Regular Expression এর মাধ্যমে বিভিন্ন Delimiter চিহ্নিত করা হয়।
উদাহরণ: কমা (,), সেমিকোলন (;), এবং স্পেস একসাথে Delimiter হিসেবে ব্যবহার
awk -F '[,; ]' '{print $1, $2, $3}' filename.txtএখানে, -F '[,; ]' ব্যবহার করে কমা, সেমিকোলন এবং স্পেস Delimiter হিসেবে ব্যবহার করা হয়েছে। ফাইলের প্রথম তিনটি ফিল্ড প্রিন্ট হবে।
২. Multiple Delimiters ব্যবহার করে ফিল্ড প্রক্রিয়াকরণ
আপনি যখন একাধিক Delimiter দিয়ে আলাদা করা ডেটা ফাইল প্রসেস করেন, তখন AWK প্রতিটি Delimiter দিয়ে ইনপুট লাইনটি বিভক্ত করে। নিচে একটি উদাহরণ দেওয়া হলো যেখানে ডেটা ফাইলটি কমা এবং পাইপ (|) দিয়ে আলাদা করা হয়েছে।
উদাহরণ: কমা এবং পাইপ Delimiter
awk -F '[,|]' '{print $1, $4}' filename.txtএখানে, কমা এবং পাইপ Delimiter হিসেবে ব্যবহার করা হয়েছে এবং প্রথম ও চতুর্থ ফিল্ড প্রিন্ট হবে।
৩. BEGIN ব্লক ব্যবহার করে Multiple Delimiters সেট করা
AWK এর BEGIN ব্লক ব্যবহার করে FS ভেরিয়েবল নির্ধারণ করেও Multiple Delimiters ব্যবহার করা যায়।
উদাহরণ: BEGIN ব্লক দিয়ে Multiple Delimiters
awk 'BEGIN {FS="[|: ]"} {print $2, $3}' filename.txtএখানে FS="[|: ]" ব্যবহার করে পাইপ, কোলন, এবং স্পেস Delimiter হিসেবে নির্ধারণ করা হয়েছে। দ্বিতীয় এবং তৃতীয় ফিল্ড প্রিন্ট হবে।
৪. Delimiters ব্যবহার করে Conditional প্রক্রিয়াকরণ
AWK এ Multiple Delimiters ব্যবহার করে নির্দিষ্ট শর্ত অনুযায়ী ডেটা ফিল্টার করতে পারেন।
উদাহরণ: নির্দিষ্ট শর্তের সাথে Multiple Delimiters
awk -F '[-,]' '$2 > 100 {print $1, $2}' filename.txtএখানে, - এবং , Delimiter হিসেবে ব্যবহার করা হয়েছে। দ্বিতীয় ফিল্ডের মান যদি 100 এর বেশি হয়, তবে প্রথম এবং দ্বিতীয় ফিল্ড প্রিন্ট হবে।
৫. Delimiters ব্যবহার করে Replacement
AWK এর gsub() ফাংশন ব্যবহার করে নির্দিষ্ট Delimiter পরিবর্তন করা সম্ভব।
উদাহরণ: Delimiter পরিবর্তন করা
awk '{gsub(/[;,]/, "|"); print $0}' filename.txtএখানে, কমা এবং সেমিকোলন Delimiterগুলিকে পাইপ দ্বারা প্রতিস্থাপন করা হয়েছে এবং প্রতিটি লাইন প্রিন্ট করা হয়েছে।
সারসংক্ষেপ
AWK এ Multiple Delimiters ব্যবহার করে ডেটা প্রক্রিয়াকরণ করা অত্যন্ত সহজ এবং কার্যকর। একাধিক Delimiter ব্যবহার করতে Regular Expression ব্যবহার করা হয়, যা বিভিন্ন ধরনের Delimiter সহজে সনাক্ত এবং ব্যবহার করতে সক্ষম করে। এটি বিশেষত সেই ক্ষেত্রে কার্যকর যখন ডেটা ফাইলটি একাধিক Delimiter দিয়ে বিভক্ত থাকে এবং ডেটা বিশ্লেষণ সহজে সম্পাদন করতে হয়।
AWK এ Multiple Delimiters এর ব্যবহার
AWK সাধারণত ফিল্ডগুলো আলাদা করতে স্পেস বা ট্যাব ব্যবহার করে, তবে প্রয়োজন অনুসারে একাধিক Delimiter ব্যবহার করা যায়। এটি ডেটা প্রসেসিংকে আরও সহজ এবং কার্যকর করে যখন আপনার ডেটা ফাইলটি একাধিক ধরনের Delimiter দ্বারা আলাদা থাকে। নিচে AWK এ Multiple Delimiters ব্যবহার করার বিভিন্ন পদ্ধতি এবং উদাহরণ দেওয়া হলো।
১. Multiple Delimiters সেট করা
AWK এ -F অপশন ব্যবহার করে Delimiter সেট করা যায়। একাধিক Delimiter ব্যবহার করার জন্য Regular Expression ব্যবহার করা হয়। Regular Expression এর মাধ্যমে বিভিন্ন Delimiter চিহ্নিত করা হয়।
উদাহরণ: কমা (,), সেমিকোলন (;), এবং স্পেস একসাথে Delimiter হিসেবে ব্যবহার
awk -F '[,; ]' '{print $1, $2, $3}' filename.txtএখানে, -F '[,; ]' ব্যবহার করে কমা, সেমিকোলন এবং স্পেস Delimiter হিসেবে ব্যবহার করা হয়েছে। ফাইলের প্রথম তিনটি ফিল্ড প্রিন্ট হবে।
২. Multiple Delimiters ব্যবহার করে ফিল্ড প্রক্রিয়াকরণ
আপনি যখন একাধিক Delimiter দিয়ে আলাদা করা ডেটা ফাইল প্রসেস করেন, তখন AWK প্রতিটি Delimiter দিয়ে ইনপুট লাইনটি বিভক্ত করে। নিচে একটি উদাহরণ দেওয়া হলো যেখানে ডেটা ফাইলটি কমা এবং পাইপ (|) দিয়ে আলাদা করা হয়েছে।
উদাহরণ: কমা এবং পাইপ Delimiter
awk -F '[,|]' '{print $1, $4}' filename.txtএখানে, কমা এবং পাইপ Delimiter হিসেবে ব্যবহার করা হয়েছে এবং প্রথম ও চতুর্থ ফিল্ড প্রিন্ট হবে।
৩. BEGIN ব্লক ব্যবহার করে Multiple Delimiters সেট করা
AWK এর BEGIN ব্লক ব্যবহার করে FS ভেরিয়েবল নির্ধারণ করেও Multiple Delimiters ব্যবহার করা যায়।
উদাহরণ: BEGIN ব্লক দিয়ে Multiple Delimiters
awk 'BEGIN {FS="[|: ]"} {print $2, $3}' filename.txtএখানে FS="[|: ]" ব্যবহার করে পাইপ, কোলন, এবং স্পেস Delimiter হিসেবে নির্ধারণ করা হয়েছে। দ্বিতীয় এবং তৃতীয় ফিল্ড প্রিন্ট হবে।
৪. Delimiters ব্যবহার করে Conditional প্রক্রিয়াকরণ
AWK এ Multiple Delimiters ব্যবহার করে নির্দিষ্ট শর্ত অনুযায়ী ডেটা ফিল্টার করতে পারেন।
উদাহরণ: নির্দিষ্ট শর্তের সাথে Multiple Delimiters
awk -F '[-,]' '$2 > 100 {print $1, $2}' filename.txtএখানে, - এবং , Delimiter হিসেবে ব্যবহার করা হয়েছে। দ্বিতীয় ফিল্ডের মান যদি 100 এর বেশি হয়, তবে প্রথম এবং দ্বিতীয় ফিল্ড প্রিন্ট হবে।
৫. Delimiters ব্যবহার করে Replacement
AWK এর gsub() ফাংশন ব্যবহার করে নির্দিষ্ট Delimiter পরিবর্তন করা সম্ভব।
উদাহরণ: Delimiter পরিবর্তন করা
awk '{gsub(/[;,]/, "|"); print $0}' filename.txtএখানে, কমা এবং সেমিকোলন Delimiterগুলিকে পাইপ দ্বারা প্রতিস্থাপন করা হয়েছে এবং প্রতিটি লাইন প্রিন্ট করা হয়েছে।
সারসংক্ষেপ
AWK এ Multiple Delimiters ব্যবহার করে ডেটা প্রক্রিয়াকরণ করা অত্যন্ত সহজ এবং কার্যকর। একাধিক Delimiter ব্যবহার করতে Regular Expression ব্যবহার করা হয়, যা বিভিন্ন ধরনের Delimiter সহজে সনাক্ত এবং ব্যবহার করতে সক্ষম করে। এটি বিশেষত সেই ক্ষেত্রে কার্যকর যখন ডেটা ফাইলটি একাধিক Delimiter দিয়ে বিভক্ত থাকে এবং ডেটা বিশ্লেষণ সহজে সম্পাদন করতে হয়।
Read more