AWK এ ফাইল হ্যান্ডলিং (File Handling in AWK)
AWK এ ফাইল হ্যান্ডলিং একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ব্যবহারকারীদের ডেটা প্রসেসিং এবং বিশ্লেষণে সহায়তা করে। AWK ব্যবহার করে আপনি ফাইল থেকে ডেটা পড়তে, প্রক্রিয়া করতে এবং নতুন ফাইলে আউটপুট লিখতে পারেন। AWK এর মাধ্যমে একাধিক ফাইলও প্রক্রিয়া করা যায়।
ফাইল থেকে ডেটা পড়া
AWK স্বাভাবিকভাবে ফাইল থেকে ডেটা পড়ে এবং প্রতিটি লাইনকে একটি রেকর্ড হিসেবে বিবেচনা করে। AWK কমান্ডে ফাইলের নাম সরাসরি উল্লেখ করা হয়।
উদাহরণ:
awk '{print $1, $2}' filename.txtএই কমান্ডটি filename.txt ফাইলের প্রতিটি লাইনের প্রথম এবং দ্বিতীয় কলাম প্রিন্ট করবে।
একাধিক ফাইল প্রক্রিয়াকরণ
AWK একাধিক ফাইল একসাথে প্রক্রিয়া করতে পারে। এতে NR এবং FNR ভেরিয়েবল ব্যবহার করে প্রতিটি ফাইলের প্রক্রিয়াকরণ নিরীক্ষণ করা যায়।
NR: মোট রেকর্ড নম্বর, যা সমস্ত ফাইলের প্রক্রিয়াকৃত লাইনের সংখ্যা গণনা করে।FNR: বর্তমান ফাইলের প্রক্রিয়াকৃত লাইনের সংখ্যা গণনা করে।
উদাহরণ:
awk '{print FILENAME, FNR, $0}' file1.txt file2.txtএই কমান্ডটি file1.txt এবং file2.txt ফাইলের প্রতিটি লাইনের ফাইল নাম, লাইন নম্বর এবং সম্পূর্ণ লাইন প্রিন্ট করবে।
ফাইলে আউটপুট লেখা
AWK এর মাধ্যমে আউটপুটকে নতুন ফাইলে লেখা যায় > বা >> অপারেটর ব্যবহার করে।
>: নতুন ফাইলে লেখে এবং পূর্ববর্তী ডেটা ওভাররাইট করে।>>: নতুন ডেটা অ্যাপেন্ড করে, পূর্ববর্তী ডেটা বজায় রাখে।
উদাহরণ:
awk '{print $1, $2 > "output.txt"}' filename.txtএই কমান্ডটি filename.txt ফাইলের প্রথম এবং দ্বিতীয় কলাম output.txt ফাইলে লেখে।
awk '{print $1, $2 >> "output.txt"}' filename.txtএই কমান্ডটি আগের ডেটা সংরক্ষণ করে এবং নতুন ডেটা output.txt ফাইলে অ্যাপেন্ড করে।
ফাইল হ্যান্ডলিং এর সাথে close() ফাংশন
AWK এ একই আউটপুট ফাইল একাধিকবার লেখার পর close() ফাংশন ব্যবহার করা হয়। এটি ফাইল হ্যান্ডলিংয়ের সময় সমস্যা এড়াতে সাহায্য করে।
উদাহরণ:
awk '{print $1 > "output.txt"; close("output.txt")}' filename.txtএটি প্রতিটি লাইনের পরে output.txt ফাইল বন্ধ করে, যা নতুন ডেটা লেখার সময় সমস্যা এড়ায়।
ফাইল থেকে নির্দিষ্ট অংশ পড়া
AWK ব্যবহার করে ফাইল থেকে নির্দিষ্ট অংশ পড়া যায় শর্ত ব্যবহার করে। উদাহরণস্বরূপ, যদি কোনো লাইনে নির্দিষ্ট প্যাটার্ন থাকে, তা খুঁজে বের করা যায়।
উদাহরণ:
awk '/pattern/ {print $0}' filename.txtএই কমান্ডটি filename.txt ফাইলের মধ্যে pattern থাকা প্রতিটি লাইন প্রিন্ট করবে।
সারসংক্ষেপ
AWK এ ফাইল হ্যান্ডলিং ব্যবহারকারীদের ফাইল থেকে ডেটা পড়া, প্রক্রিয়া করা এবং আউটপুট নতুন ফাইলে লেখা সহজ করে তোলে। একাধিক ফাইল প্রক্রিয়াকরণ, আউটপুট লেখার অপারেটর, এবং close() ফাংশন ব্যবহারের মাধ্যমে ডেটা হ্যান্ডলিং আরও কার্যকরী হয়। AWK এর এই ক্ষমতা বড় আকারের ডেটাসেট প্রক্রিয়াকরণের সময় খুবই সহায়ক।
Multiple Files এর সাথে কাজ করা
AWK একটি শক্তিশালী টুল যা একই সময়ে একাধিক ফাইল প্রক্রিয়াকরণে সক্ষম। এটি আপনাকে বিভিন্ন ফাইল থেকে ডেটা ফিল্টার করা, বিশ্লেষণ করা এবং আউটপুট তৈরি করতে সহায়তা করে। AWK যখন একাধিক ফাইল নিয়ে কাজ করে, তখন প্রতিটি ফাইলের জন্য ডেটা লাইন বাই লাইন পড়া হয় এবং প্রক্রিয়াকরণ করা হয়।
একাধিক ফাইল প্রক্রিয়াকরণের মৌলিক ধারণা
AWK ব্যবহার করে একাধিক ফাইল একসাথে প্রক্রিয়া করার জন্য, ফাইলের নামগুলি AWK কমান্ডের শেষে একের পর এক তালিকাভুক্ত করা হয়। AWK নিজেই প্রতিটি ফাইল প্রক্রিয়া করে এবং FILENAME ভেরিয়েবল ব্যবহার করে বর্তমান ফাইলের নাম চিহ্নিত করা যায়।
মৌলিক সিনট্যাক্স:
awk 'pattern { action }' file1.txt file2.txt ...উদাহরণ ১: একাধিক ফাইল থেকে ডেটা প্রিন্ট করা
awk '{ print $1, $2 }' file1.txt file2.txtএটি file1.txt এবং file2.txt থেকে প্রতিটি লাইনের প্রথম এবং দ্বিতীয় ফিল্ড প্রিন্ট করবে।
উদাহরণ ২: FILENAME ভেরিয়েবলের ব্যবহার
AWK-এর বিল্ট-ইন ভেরিয়েবল FILENAME ব্যবহার করে আপনি জানতে পারবেন কোন ফাইল থেকে বর্তমানে ডেটা পড়া হচ্ছে।
awk '{ print FILENAME ": " $0 }' file1.txt file2.txtএই কমান্ডটি প্রতিটি লাইনের সামনে ফাইলের নামসহ পুরো লাইন প্রিন্ট করবে।
আউটপুট:
file1.txt: Line 1 of file1
file1.txt: Line 2 of file1
file2.txt: Line 1 of file2
file2.txt: Line 2 of file2উদাহরণ ৩: প্রতিটি ফাইলের জন্য আলাদা প্রক্রিয়াকরণ
AWK-তে FNR ভেরিয়েবল ব্যবহার করে প্রতিটি ফাইলের লাইন নম্বর ট্র্যাক করা যায়। NR ভেরিয়েবল পুরো প্রক্রিয়াকরণের জন্য মোট লাইন নম্বর ট্র্যাক করে, কিন্তু FNR প্রতিটি ফাইলের জন্য পুনরায় শুরু হয়।
awk 'FNR == 1 { print "Processing file:", FILENAME } { print $0 }' file1.txt file2.txtএই স্ক্রিপ্টটি প্রতিটি নতুন ফাইলের শুরুতে ফাইলের নাম প্রিন্ট করবে এবং তারপরে প্রতিটি লাইন প্রিন্ট করবে।
উদাহরণ ৪: একাধিক ফাইল থেকে নির্দিষ্ট তথ্য সংগ্রহ করা
ধরা যাক, আপনি দুটি ফাইল থেকে দ্বিতীয় কলামের যোগফল বের করতে চান।
awk '{ sum += $2 } END { print "Total sum of second column:", sum }' file1.txt file2.txtএটি file1.txt এবং file2.txt থেকে দ্বিতীয় কলামের সমস্ত মানের যোগফল প্রিন্ট করবে।
উদাহরণ ৫: নির্দিষ্ট ফাইলের ডেটা ফিল্টার করা
AWK-এর if শর্ত ব্যবহার করে, আপনি নির্দিষ্ট ফাইলের ডেটা ফিল্টার করতে পারেন।
awk 'FILENAME == "file1.txt" && $1 ~ /pattern/ { print $0 }' file1.txt file2.txtএটি শুধুমাত্র file1.txt থেকে প্রথম ফিল্ডে "pattern" থাকা লাইনগুলো প্রিন্ট করবে।
সারসংক্ষেপ
AWK ব্যবহার করে একাধিক ফাইল প্রক্রিয়াকরণ একটি অত্যন্ত কার্যকরী পদ্ধতি, যা ডেটা বিশ্লেষণ এবং ফিল্টার করার কাজকে সহজ করে। FILENAME এবং FNR এর মতো বিল্ট-ইন ভেরিয়েবল ব্যবহার করে, আপনি একাধিক ফাইল নিয়ে কাজ করার সময় আরও নিয়ন্ত্রণ পেতে পারেন। এই বৈশিষ্ট্যগুলি AWK-কে ডেটা ম্যানিপুলেশনের জন্য একটি শক্তিশালী টুল হিসেবে প্রতিষ্ঠিত করেছে।
AWK এ File Redirection এবং File Input/Output
AWK ব্যবহার করে ডেটা প্রসেসিংয়ের সময় আমরা আউটপুট অন্য একটি ফাইলে সংরক্ষণ করতে বা ইনপুট এক বা একাধিক ফাইল থেকে নিতে পারি। File Redirection এবং File Input/Output এর মাধ্যমে জটিল ডেটা প্রক্রিয়াকরণ সহজে করা যায়।
File Redirection (আউটপুট রিডাইরেকশন)
AWK এ > এবং >> চিহ্ন ব্যবহার করে আউটপুটকে ফাইলে রিডাইরেক্ট করা যায়:
>: নতুন আউটপুট ফাইল তৈরি করে এবং পুরোনো ডেটা ওভাররাইট করে।>>: বিদ্যমান ফাইলের শেষে আউটপুট অ্যাপেন্ড করে।
উদাহরণ ১: AWK আউটপুট ফাইলে রিডাইরেক্ট করা
awk '{print $1, $2}' input.txt > output.txtএখানে, input.txt ফাইলের প্রথম এবং দ্বিতীয় কলাম output.txt ফাইলে সংরক্ষণ করা হবে। যদি output.txt আগে থেকে থাকে, তাহলে তার পুরোনো ডেটা ওভাররাইট হবে।
উদাহরণ ২: আউটপুট অ্যাপেন্ড করা
awk '{print $1, $2}' input.txt >> output.txtএখানে, input.txt ফাইলের প্রথম এবং দ্বিতীয় কলাম output.txt ফাইলের শেষে যোগ করা হবে।
File Input (এক বা একাধিক ফাইল থেকে ইনপুট নেওয়া)
AWK ব্যবহার করে এক বা একাধিক ফাইল থেকে ডেটা নেওয়া যায়। একাধিক ফাইলের ক্ষেত্রে AWK প্রতিটি ফাইল আলাদা করে প্রক্রিয়া করে।
উদাহরণ ৩: একাধিক ফাইল থেকে ডেটা প্রক্রিয়াকরণ
awk '{print $1, $2}' file1.txt file2.txtএখানে, file1.txt এবং file2.txt উভয় ফাইলের প্রথম এবং দ্বিতীয় কলাম প্রিন্ট হবে।
উদাহরণ ৪: ফাইলের নামসহ আউটপুট
AWK এর বিল্ট-ইন ভেরিয়েবল FILENAME ব্যবহার করে ইনপুট ফাইলের নামসহ আউটপুট প্রিন্ট করা যায়:
awk '{print FILENAME ": " $0}' file1.txt file2.txtএখানে, প্রতিটি লাইন তার ফাইলের নামসহ প্রিন্ট হবে।
File Input/Output সহ AWK এর অ্যাডভান্সড ব্যবহার
AWK স্ক্রিপ্টের মধ্যে ফাইল ইনপুট/আউটপুটও করা যায়।
উদাহরণ ৫: আউটপুট ফাইলে রিডাইরেক্ট করা
awk '{
if ($3 > 50) {
print $0 > "high_scores.txt" # তৃতীয় কলামের মান ৫০ এর বেশি হলে এই ফাইলে সংরক্ষণ
} else {
print $0 > "low_scores.txt" # অন্যথায় এই ফাইলে সংরক্ষণ
}
}' scores.txtএখানে, scores.txt ফাইলের তৃতীয় কলাম চেক করা হচ্ছে। যদি মান ৫০ এর বেশি হয়, তবে সেই লাইন high_scores.txt তে সংরক্ষণ করা হবে, আর যদি কম হয় তবে low_scores.txt তে সংরক্ষণ করা হবে।
উদাহরণ ৬: আউটপুট ফাইল ক্লোজ করা
AWK এ একটি ফাইলের আউটপুট সম্পন্ন হলে তা ক্লোজ করা জরুরি হতে পারে। ক্লোজ করার জন্য close() ফাংশন ব্যবহার করা হয়:
awk '{
print $0 > "output.txt"
close("output.txt") # প্রতিটি আউটপুটের পরে ফাইল ক্লোজ করা হচ্ছে
}' input.txtএটি নিশ্চিত করে যে, পরবর্তী আউটপুট একই ফাইলে পুনরায় লেখা যাবে এবং ডেটা সঠিকভাবে সংরক্ষিত হবে।
সারসংক্ষেপ
AWK এ File Redirection এবং File Input/Output ব্যবহার করে ডেটা প্রসেসিং এবং সংরক্ষণের কাজ খুবই সহজ এবং কার্যকরী। আউটপুট রিডাইরেকশন ব্যবহার করে আউটপুট ফাইলে সংরক্ষণ করা এবং এক বা একাধিক ফাইল থেকে ইনপুট নিয়ে ডেটা বিশ্লেষণ করা সম্ভব। AWK এর মাধ্যমে এই ক্ষমতা ব্যবহার করে আপনি ডেটা প্রসেসিং কাজকে আরও সহজ এবং কার্যকর করতে পারেন।
getline ফাংশন এবং এর প্রয়োগ
AWK তে getline ফাংশন একটি শক্তিশালী টুল, যা ফাইল থেকে বা স্ট্যান্ডার্ড ইনপুট থেকে সরাসরি একটি লাইন পড়তে ব্যবহৃত হয়। এটি ব্যবহার করে ইনপুট প্রসেসিং আরও বেশি কাস্টমাইজ করা যায়। AWK এর সাধারণ প্রক্রিয়াকরণ মডেল অনুযায়ী প্রতিটি রেকর্ড স্বয়ংক্রিয়ভাবে প্রসেস করা হলেও, getline ব্যবহারকারীদের ম্যানুয়ালি একটি লাইন পড়ার ক্ষমতা দেয়।
getline ফাংশনের ব্যবহার
getline ফাংশন বিভিন্ন উপায়ে ব্যবহার করা যায়:
একটি লাইন পড়া এবং প্রসেস করা:
awk '{ line = $0 # বর্তমান লাইনের জন্য print line # প্রিন্ট করা getline # পরবর্তী লাইন পড়া print "Next Line:", $0 }' data.txtএই উদাহরণে,
getlineবর্তমান লাইনের পরবর্তী লাইন পড়ে এবং সেটিকে প্রিন্ট করে।একটি নির্দিষ্ট ফাইল থেকে লাইন পড়া:
awk 'BEGIN { while ((getline line < "input.txt") > 0) { print line } }'এখানে,
input.txtফাইল থেকে এক এক করে প্রতিটি লাইন পড়ে এবং প্রিন্ট করা হয়।ভেরিয়েবলে লাইন পড়া এবং সংরক্ষণ করা:
awk '{ count += 1 if (getline line < "additional.txt") > 0) { print "Line from data.txt:", $0 print "Line from additional.txt:", line } }' data.txtএই উদাহরণে,
data.txtফাইল থেকে বর্তমান লাইন পড়ার পরadditional.txtফাইল থেকে একটি লাইন পড়া হয় এবং দুটোই প্রিন্ট করা হয়।
getline ফাংশনের রিটার্ন ভ্যালু
- 1: যদি
getlineসফলভাবে একটি লাইন পড়ে। - 0: যদি EOF (End of File) পৌঁছে যায়।
- -1: যদি কোনো ত্রুটি ঘটে (যেমন ফাইলটি পড়ার সময় কোনো সমস্যা)।
উদাহরণ:
awk 'BEGIN {
if ((getline < "nonexistent.txt") < 0) {
print "Error reading file!"
}
}'getline এর ব্যবহারিক প্রয়োগ
একাধিক ইনপুট ফাইল পড়া:
awk '{ print "From main input:", $0 if (getline line < "secondary.txt") > 0) { print "From secondary file:", line } }' primary.txtএখানে,
primary.txtথেকে একটি লাইন পড়ার পরsecondary.txtথেকে একটি লাইন পড়া হয়।শর্তাধীন লাইনে যাওয়া:
awk '{ if ($1 == "START") { getline # "START" লাইনের পরের লাইন সরাসরি পড়ে print "Next line after START:", $0 } }' input.txtএখানে, যদি প্রথম ফিল্ডটি "START" হয়, তবে
getlineব্যবহার করে পরবর্তী লাইন পড়া এবং প্রিন্ট করা হয়।
সতর্কতা
getlineব্যবহার করার সময় সতর্কতা অবলম্বন করা উচিত, কারণ এটি AWK এর স্বাভাবিক ফিল্ড এবং রেকর্ড প্রসেসিং লজিক পরিবর্তন করতে পারে।getlineফাংশন যদি ভুলভাবে ব্যবহৃত হয়, তবে এটি প্রোগ্রামকে জটিল করে তুলতে পারে এবং অনাকাঙ্ক্ষিত আচরণ সৃষ্টি করতে পারে।
সারসংক্ষেপ
AWK এর getline ফাংশন ব্যবহার করে ইনপুট পড়ার প্রক্রিয়াকে আরও নমনীয় ও কাস্টমাইজ করা যায়। এটি ব্যবহারকারীদের নির্দিষ্ট শর্তে ইনপুট পড়া, ফাইল থেকে একাধিক লাইন পড়া, এবং ম্যানুয়ালি ইনপুট হ্যান্ডল করার ক্ষমতা দেয়। তবে getline ব্যবহারের সময় সতর্ক থাকা গুরুত্বপূর্ণ, কারণ এটি AWK এর স্বাভাবিক প্রক্রিয়াকরণ লজিক পরিবর্তন করতে পারে।
AWK ব্যবহার করে ফাইল থেকে Data Extraction এবং ফাইলে Data লিখা
AWK একটি শক্তিশালী টুল যা ফাইল থেকে ডেটা বের করা (Data Extraction) এবং ফাইলে ডেটা লিখার (Data Writing) কাজকে সহজ এবং কার্যকর করে। এটি টেক্সট ফাইলের লাইন এবং ফিল্ড বিশ্লেষণ করে নির্দিষ্ট ডেটা প্রক্রিয়া করতে পারে। নিচে AWK ব্যবহার করে কিভাবে ফাইল থেকে ডেটা বের করা এবং ফাইলে ডেটা লেখা যায় তার বিস্তারিত উদাহরণ দেওয়া হলো।
১. ফাইল থেকে Data Extraction
AWK ব্যবহার করে ফাইল থেকে নির্দিষ্ট ফিল্ড বা প্যাটার্ন অনুযায়ী ডেটা বের করা যায়।
উদাহরণ: নির্দিষ্ট ফিল্ড প্রিন্ট করা
awk '{print $1, $3}' input.txtএখানে, input.txt ফাইলের প্রথম এবং তৃতীয় কলাম প্রিন্ট হবে।
উদাহরণ: প্যাটার্ন অনুযায়ী লাইন প্রিন্ট করা
awk '/error/ {print $0}' log.txtএখানে, log.txt ফাইলের যেসব লাইনে "error" শব্দ রয়েছে, সেগুলি প্রিন্ট হবে।
২. ফাইলে Data লিখা
AWK ব্যবহার করে ডেটা প্রসেস করে তা নতুন ফাইলে বা বিদ্যমান ফাইলে লেখা সম্ভব।
উদাহরণ: ফাইল থেকে ডেটা পড়ে নতুন ফাইলে লেখা
awk '{print $1, $3}' input.txt > output.txtএখানে, input.txt ফাইলের প্রথম এবং তৃতীয় কলাম output.txt ফাইলে লেখা হবে। > অপারেটরটি ব্যবহার করে বিদ্যমান ফাইল ওভাররাইট করা হয়।
উদাহরণ: বিদ্যমান ফাইলে ডেটা অ্যাপেন্ড করা
awk '/success/ {print $0}' log.txt >> result.txtএখানে, log.txt ফাইলের যেসব লাইনে "success" শব্দ রয়েছে, সেগুলি result.txt ফাইলে অ্যাপেন্ড করা হবে। >> অপারেটরটি বিদ্যমান ফাইলে ডেটা যোগ করে।
৩. BEGIN এবং END ব্লক ব্যবহার করে ডেটা প্রসেসিং
AWK এ BEGIN এবং END ব্লক ব্যবহার করে ফাইল লেখার আগে বা পরে নির্দিষ্ট কমান্ড চালানো যায়।
উদাহরণ: ডেটা প্রসেস করার আগে এবং পরে টেক্সট প্রিন্ট করা
awk 'BEGIN {print "Processing starts"} {print $1, $2} END {print "Processing ends"}' input.txt > output.txtএখানে, input.txt ফাইলের প্রথম এবং দ্বিতীয় কলাম output.txt ফাইলে লেখা হবে এবং ফাইলের শুরুতে "Processing starts" এবং শেষে "Processing ends" লেখা হবে।
৪. Shell Script এর মাধ্যমে AWK ব্যবহার করে ফাইলে ডেটা লেখা
AWK এর ক্ষমতা Shell Script এর মধ্যে সংযোজন করা হলে ডেটা প্রসেসিং আরও উন্নত হয়।
run_script.sh:
#!/bin/bash
# ফাইল থেকে ডেটা পড়ে নতুন ফাইলে লেখা
awk '{if ($2 > 50) print $0}' data.txt > filtered_data.txtএখানে, data.txt ফাইলের যেসব লাইনে দ্বিতীয় কলামের মান ৫০ এর বেশি, সেগুলি filtered_data.txt ফাইলে লেখা হবে।
সারসংক্ষেপ
AWK ব্যবহার করে ফাইল থেকে ডেটা বের করা এবং ফাইলে ডেটা লেখার কাজ অত্যন্ত কার্যকরভাবে করা যায়। এটি সহজ সিনট্যাক্স এবং শক্তিশালী ফিচারের মাধ্যমে ডেটা প্রসেসিং এবং বিশ্লেষণের কাজকে দ্রুত এবং সুশৃঙ্খল করে তোলে। > এবং >> অপারেটর ব্যবহার করে ডেটা নতুন ফাইলে লেখা বা বিদ্যমান ফাইলে অ্যাপেন্ড করা যায়। Shell Script এর সাথে AWK এর সমন্বয় ডেটা ম্যানিপুলেশনের শক্তিশালী সমাধান প্রদান করে।
Read more