AWK এ Data Filtering এবং Sorting (Data Filtering and Sorting in AWK)
AWK একটি শক্তিশালী টুল যা টেক্সট ডেটা প্রসেসিং এবং ফিল্টারিংয়ে বিশেষজ্ঞ। এটি ডেটা থেকে নির্দিষ্ট প্যাটার্ন বের করতে এবং প্রয়োজনীয় আউটপুট প্রদানে সহায়তা করে। যদিও AWK নিজেই সরাসরি ডেটা সর্টিং (sorting) ফাংশন প্রদান করে না, তবে এটি ব্যবহার করে সহজ পদ্ধতিতে ডেটা ফিল্টার করা যায় এবং Shell কমান্ড বা অন্যান্য টুলের সঙ্গে ব্যবহার করে সর্টিং করা সম্ভব।
Data Filtering in AWK
AWK এর মাধ্যমে নির্দিষ্ট প্যাটার্নের ভিত্তিতে ডেটা ফিল্টার করা যায়। AWK এ নিয়মিত এক্সপ্রেশন এবং শর্ত ব্যবহার করে ডেটা ফিল্টার করা খুবই সহজ।
উদাহরণ ১: নির্দিষ্ট প্যাটার্ন খোঁজা
awk '/pattern/ {print $0}' filename.txtএটি filename.txt ফাইলের মধ্যে pattern শব্দটি থাকা প্রতিটি লাইন প্রিন্ট করবে।
উদাহরণ ২: নির্দিষ্ট শর্তের ভিত্তিতে ফিল্টার
awk '$3 > 100 {print $1, $3}' filename.txtএটি filename.txt ফাইলের তৃতীয় কলামের মান ১০০ এর বেশি হলে প্রথম এবং তৃতীয় কলাম প্রিন্ট করবে।
Multiple Conditions ব্যবহার করে Filtering
AWK এ লজিক্যাল অপারেটর (&&, ||) ব্যবহার করে একাধিক শর্তের ভিত্তিতে ডেটা ফিল্টার করা যায়।
উদাহরণ ৩: একাধিক শর্তের ভিত্তিতে ফিল্টার
awk '$2 > 50 && $3 < 200 {print $1, $2, $3}' filename.txtএটি filename.txt ফাইলের দ্বিতীয় কলামের মান ৫০ এর বেশি এবং তৃতীয় কলামের মান ২০০ এর কম হলে প্রথম তিনটি কলাম প্রিন্ট করবে।
Data Sorting in AWK
যদিও AWK নিজেই ডেটা সর্টিং করতে পারে না, তবে sort কমান্ড ব্যবহার করে Shell এর মধ্যে AWK এর আউটপুট সর্ট করা যায়।
উদাহরণ ৪: AWK এর আউটপুট সর্ট করা
awk '{print $1, $3}' filename.txt | sort -k2,2nএটি filename.txt ফাইলের প্রথম এবং তৃতীয় কলাম প্রিন্ট করবে এবং তৃতীয় কলামের মানের ভিত্তিতে সংখ্যা অনুযায়ী সর্ট করবে।
AWK এর মাধ্যমে Custom Sorting
AWK স্ক্রিপ্টে কাস্টম সর্টিং লজিক তৈরি করা সম্ভব, তবে এটি আরও জটিল হতে পারে। AWK এর মধ্যে কাস্টম সর্টিং লজিক যোগ করার একটি উদাহরণ:
{
arr[NR] = $0
keys[NR] = $2 # Sort based on second column
}
END {
n = asort(keys)
for (i = 1; i <= n; i++) {
print arr[i]
}
}উল্লেখ্য, asort() ফাংশন শুধুমাত্র নতুন AWK সংস্করণে উপলব্ধ।
AWK এর সঙ্গে sort কমান্ডের ব্যবহার
AWK এর সঙ্গে sort কমান্ড ব্যবহার করে দ্রুত এবং কার্যকরভাবে ডেটা সর্ট করা সম্ভব।
উদাহরণ ৫: সম্পূর্ণ কমান্ড
awk '{print $2, $1}' filename.txt | sort -k1,1 -rএটি filename.txt ফাইলের দ্বিতীয় এবং প্রথম কলাম প্রিন্ট করবে এবং প্রথম কলামের মান অনুযায়ী রিভার্স সর্ট করবে।
সারসংক্ষেপ
AWK ব্যবহার করে ডেটা ফিল্টার করা সহজ এবং কার্যকর। যদিও AWK নিজেই সরাসরি ডেটা সর্ট করতে পারে না, Shell এর অন্যান্য টুল যেমন sort ব্যবহার করে AWK এর আউটপুট সর্ট করা যায়। AWK এর মাধ্যমে ফিল্টারিং এবং Shell এর সর্টিং ক্ষমতা একত্রে ব্যবহার করে ব্যবহারকারীরা বড় আকারের ডেটাসেট সহজেই বিশ্লেষণ করতে পারেন।
Data Filtering Techniques এবং তার প্রয়োগ
Data Filtering হল ডেটা প্রক্রিয়াকরণের একটি গুরুত্বপূর্ণ প্রক্রিয়া, যার মাধ্যমে বড় ডেটাসেট থেকে নির্দিষ্ট প্যাটার্ন বা শর্ত অনুযায়ী ডেটা বের করা হয়। AWK, Python, এবং Shell স্ক্রিপ্টের মতো টুল এবং প্রোগ্রামিং ভাষাগুলিতে ডেটা ফিল্টারিং প্রক্রিয়াটি সহজে করা যায়। এখানে AWK-এর মাধ্যমে Data Filtering-এর কিছু গুরুত্বপূর্ণ টেকনিক এবং তার প্রয়োগ নিয়ে আলোচনা করা হলো।
1. শর্ত ব্যবহার করে ডেটা ফিল্টারিং
AWK-তে ডেটা ফিল্টারিং সাধারণত শর্ত (condition) ব্যবহার করে করা হয়। AWK প্রতিটি লাইনের ডেটা পড়ে এবং যদি শর্ত সত্য হয়, তাহলে নির্দিষ্ট কার্যক্রম (action) কার্যকর হয়।
উদাহরণ:
awk '$3 > 50 { print $0 }' data.txtএই কমান্ডটি data.txt ফাইলের তৃতীয় ফিল্ডের মান 50 এর বেশি হলে পুরো লাইন প্রিন্ট করবে।
2. নির্দিষ্ট শব্দ বা প্যাটার্ন দিয়ে ফিল্টারিং
AWK-তে নির্দিষ্ট শব্দ বা প্যাটার্নের সাথে মিলে যাওয়া লাইন ফিল্টার করার জন্য নিয়মিত এক্সপ্রেশন ব্যবহার করা যায়।
উদাহরণ:
awk '/error/ { print $0 }' logfile.txtএই কমান্ডটি logfile.txt ফাইল থেকে error শব্দটি থাকা সব লাইন প্রিন্ট করবে।
3. ফিল্ডের উপর ভিত্তি করে ফিল্টারিং
AWK ব্যবহার করে নির্দিষ্ট ফিল্ডের মানের ভিত্তিতে ডেটা ফিল্টার করা যায়। $ চিহ্ন ব্যবহার করে ফিল্ড নির্বাচন করা হয়।
উদাহরণ:
awk '$1 == "Alice" { print $2, $3 }' data.txtএই কমান্ডটি data.txt ফাইল থেকে প্রথম ফিল্ডে "Alice" থাকা লাইনগুলির দ্বিতীয় এবং তৃতীয় ফিল্ড প্রিন্ট করবে।
4. লজিক্যাল অপারেটর দিয়ে শর্ত মিলানো
AWK-তে লজিক্যাল অপারেটর (&&, ||, !) ব্যবহার করে একাধিক শর্ত একসাথে মিলিয়ে ডেটা ফিল্টার করা যায়।
উদাহরণ:
awk '$2 > 20 && $3 < 100 { print $1, $2, $3 }' data.txtএই কমান্ডটি data.txt ফাইল থেকে সেই লাইনগুলো প্রিন্ট করবে যেগুলির দ্বিতীয় ফিল্ডের মান 20 এর বেশি এবং তৃতীয় ফিল্ডের মান 100 এর কম।
5. BEGIN এবং END ব্লক ব্যবহার করে প্রক্রিয়াকরণ
AWK-তে BEGIN এবং END ব্লক ব্যবহার করে ডেটা প্রক্রিয়াকরণের আগে এবং পরে কার্যক্রম পরিচালনা করা যায়।
উদাহরণ:
awk 'BEGIN { print "Processing Data..." }
$2 > 50 { count++ }
END { print "Total number of records with second field > 50:", count }' data.txtএই স্ক্রিপ্টটি data.txt ফাইলের দ্বিতীয় ফিল্ডের মান 50 এর বেশি হলে সেগুলোর সংখ্যা গণনা করবে এবং শেষে আউটপুট প্রিন্ট করবে।
6. নির্দিষ্ট ফিল্ডের মিল খুঁজে বের করা
AWK-এর ~ অপারেটর ব্যবহার করে ফিল্ডের মধ্যে নিয়মিত এক্সপ্রেশন মিল খুঁজে বের করা যায়।
উদাহরণ:
awk '$1 ~ /^[A-Z]/ { print $0 }' data.txtএই কমান্ডটি data.txt ফাইল থেকে প্রথম ফিল্ডে বড় হাতের অক্ষর দিয়ে শুরু হওয়া লাইনগুলো প্রিন্ট করবে।
Data Filtering-এর অন্যান্য টেকনিক
ফিল্টার করা ডেটা সংরক্ষণ করা:
awk '$3 > 100 { print $0 }' data.txt > filtered_data.txtএই কমান্ডটি ফিল্টার করা ডেটা
filtered_data.txtফাইলে সংরক্ষণ করবে।গণনা এবং গড় বের করা:
awk '{ sum += $2; count++ } END { print "Average:", sum / count }' data.txtএই স্ক্রিপ্টটি
data.txtফাইলের দ্বিতীয় ফিল্ডের গড় নির্ণয় করবে।
সারসংক্ষেপ
Data Filtering একটি গুরুত্বপূর্ণ প্রক্রিয়া, যা বড় আকারের ডেটাসেট থেকে নির্দিষ্ট ডেটা বের করতে সহায়ক। AWK-এর মাধ্যমে শর্ত, নিয়মিত এক্সপ্রেশন এবং লজিক্যাল অপারেটর ব্যবহার করে সহজেই ডেটা ফিল্টার করা যায়। Data Filtering টেকনিক ব্যবহার করে ডেটা বিশ্লেষণ এবং প্রক্রিয়াকরণ আরও কার্যকর এবং সঠিক করা সম্ভব।
AWK এ Data Sorting এবং Custom Sort Function
AWK সাধারণত ডেটা প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়, তবে এতে বিল্ট-ইন sort ফাংশন নেই। তবে, AWK এ আমরা ডেটা সনির্দিষ্টভাবে সাজানোর জন্য কাস্টম ফাংশন তৈরি করতে পারি। এখানে, AWK এ কীভাবে ডেটা সনির্দিষ্টভাবে সাজানো যায় এবং কাস্টম সোর্ট ফাংশন ব্যবহার করা যায় তার উদাহরণ দেওয়া হলো।
সাধারণ ধারণা: AWK এবং Data Sorting
যদিও AWK নিজে থেকেই ডেটা সোর্ট করার জন্য বিল্ট-ইন ফাংশন সরবরাহ করে না, AWK স্ক্রিপ্টের মধ্যে অ্যারে ব্যবহার করে এবং বাইরের কমান্ড যেমন sort ব্যবহার করে ডেটা সনির্দিষ্টভাবে সাজানো যায়।
বাইরের sort কমান্ড ব্যবহার
AWK এর আউটপুট পাইপলাইনের মাধ্যমে sort কমান্ডে পাঠিয়ে সহজেই ডেটা সনির্দিষ্টভাবে সাজানো যায়।
awk '{print $1, $2}' filename.txt | sort -k2,2nএখানে, filename.txt ফাইলের প্রথম এবং দ্বিতীয় কলাম প্রিন্ট করা হয়েছে এবং sort -k2,2n দ্বারা দ্বিতীয় কলাম অনুযায়ী সনির্দিষ্টভাবে সাজানো হয়েছে।
AWK এ Custom Sort Function তৈরি করা
AWK এ কাস্টম সোর্ট ফাংশন তৈরি করতে অ্যারে এবং একটি ফাংশন ব্যবহার করে আমরা নিজেরাই ডেটা সনির্দিষ্টভাবে সাজাতে পারি। নিচে একটি কাস্টম সোর্ট ফাংশনের উদাহরণ দেওয়া হলো।
উদাহরণ: কাস্টম সোর্ট ফাংশন
awk '
function bubble_sort(array, n) {
for (i = 1; i <= n; i++) {
for (j = i + 1; j <= n; j++) {
if (array[i] > array[j]) {
temp = array[i]
array[i] = array[j]
array[j] = temp
}
}
}
}
BEGIN {
# ডেটা অ্যারেতে যোগ করা
data[1] = 42
data[2] = 15
data[3] = 27
data[4] = 33
data[5] = 19
n = 5 # অ্যারের দৈর্ঘ্য
# সোর্ট ফাংশন কল করা
bubble_sort(data, n)
# সনির্দিষ্টভাবে সাজানো ডেটা প্রিন্ট করা
for (i = 1; i <= n; i++) {
print data[i]
}
}
'বর্ণনা:
bubble_sortনামের একটি ফাংশন তৈরি করা হয়েছে, যা বুদ্বুদ সনির্দিষ্ট পদ্ধতি ব্যবহার করে অ্যারেকে সনির্দিষ্টভাবে সাজায়।tempভেরিয়েবল ব্যবহার করে অ্যারের মান অদলবদল করা হয়েছে।BEGINব্লকে অ্যারে তৈরি করা হয়েছে এবং সনির্দিষ্টভাবে সাজানো ডেটা প্রিন্ট করা হয়েছে।
আউটপুট:
15
19
27
33
42কাস্টম সোর্ট ফাংশন ব্যবহার করে ফাইল থেকে ডেটা সনির্দিষ্ট করা
আপনি ফাইল থেকে ডেটা পড়ে এবং অ্যারেতে সংরক্ষণ করে কাস্টম সোর্ট ফাংশন ব্যবহার করতে পারেন।
awk '
function bubble_sort(array, n) {
for (i = 1; i <= n; i++) {
for (j = i + 1; j <= n; j++) {
if (array[i] > array[j]) {
temp = array[i]
array[i] = array[j]
array[j] = temp
}
}
}
}
{
data[NR] = $1 # ফাইলের প্রতিটি লাইনের প্রথম কলাম অ্যারেতে যোগ করা
count = NR
}
END {
bubble_sort(data, count) # সনির্দিষ্ট ফাংশন কল করা
for (i = 1; i <= count; i++) {
print data[i]
}
}
' filename.txtবর্ণনা:
- ফাইল থেকে ডেটা পড়ে
dataঅ্যারেতে সংরক্ষণ করা হয়েছে। ENDব্লকেbubble_sortফাংশন ব্যবহার করে ডেটা সনির্দিষ্টভাবে সাজানো হয়েছে এবং প্রিন্ট করা হয়েছে।
সারসংক্ষেপ
AWK এ ডেটা সনির্দিষ্টভাবে সাজানোর জন্য বিল্ট-ইন ফাংশন না থাকলেও আমরা কাস্টম সোর্ট ফাংশন তৈরি করে ডেটা সনির্দিষ্ট করতে পারি। বাইরের sort কমান্ডের মাধ্যমে সহজভাবে ডেটা সনির্দিষ্ট করা যায়, তবে জটিল কাজের জন্য কাস্টম ফাংশন তৈরি করা প্রয়োজন হতে পারে। AWK এ অ্যারে এবং লজিক্যাল অপারেটর ব্যবহার করে আপনি আপনার নিজের সনির্দিষ্ট ফাংশন তৈরি করতে পারেন যা ডেটা প্রক্রিয়াকরণের ক্ষমতা বাড়ায়।
Unique Data Extraction এবং Duplicate Removal
AWK তে ডেটা প্রক্রিয়াকরণের সময় সাধারণত ডুপ্লিকেট ডেটা মুছে ফেলা বা অনন্য ডেটা বের করা একটি গুরুত্বপূর্ণ কাজ। AWK এর শক্তিশালী ডেটা ম্যানিপুলেশন ক্ষমতা ব্যবহার করে সহজেই ইউনিক ডেটা এক্সট্রাকশন এবং ডুপ্লিকেট রিমুভাল করা যায়।
Unique Data Extraction
AWK তে অ্যারে ব্যবহার করে অনন্য ডেটা এক্সট্রাক্ট করা যায়। প্রতিটি ডেটা ইনডেক্স হিসেবে অ্যারেতে সংরক্ষণ করা হলে, ডুপ্লিকেট ডেটা স্বয়ংক্রিয়ভাবে একবারই সংরক্ষিত হয়।
উদাহরণ:
awk '!seen[$0]++ { print }' data.txtব্যাখ্যা:
!seen[$0]++শর্তটি চেক করে যে$0(সম্পূর্ণ লাইন) অ্যারেতে আগে ছিল কিনা।- প্রথমবার যখন কোনো লাইন দেখা যায়, তখন
seen[$0]এর মান0থাকে এবং এটি প্রিন্ট হয়। পরবর্তীতে একই লাইন আবার পাওয়া গেলে শর্তটি মিথ্যা হয় এবং প্রিন্ট হয় না।
ফিল্ড ভিত্তিক Unique Extraction
awk '!seen[$1]++ { print $1 }' data.txtএটি data.txt ফাইলের প্রথম কলামের অনন্য মানগুলো প্রিন্ট করবে।
Duplicate Removal
ডুপ্লিকেট ডেটা রিমুভ করতে AWK তে অ্যারের সাহায্যে সহজেই শর্ত ব্যবহার করা যায়।
উদাহরণ:
awk '!seen[$0]++' data.txt > unique_data.txtব্যাখ্যা:
!seen[$0]++শর্তের মাধ্যমেdata.txtফাইলের ডুপ্লিকেট লাইন বাদ দেওয়া হয়েছে।- আউটপুট
unique_data.txtফাইলে সংরক্ষিত হয়েছে।
ফিল্ড ভিত্তিক Duplicate Removal
awk '!seen[$2]++ { print $0 }' data.txtএটি data.txt ফাইলের দ্বিতীয় কলাম ভিত্তিক ডুপ্লিকেট লাইন বাদ দিয়ে প্রিন্ট করবে।
ব্যবহারিক উদাহরণ
ইমেল তালিকা থেকে অনন্য ইমেল বের করা:
awk '!seen[$1]++ { print $1 }' emails.txtএটি emails.txt ফাইলের প্রথম কলাম থেকে অনন্য ইমেল বের করবে এবং প্রিন্ট করবে।
ডুপ্লিকেট নাম বাদ দিয়ে সম্পূর্ণ লাইন প্রিন্ট করা:
awk '!seen[$1]++' names.txtএটি names.txt ফাইলের প্রথম কলাম ভিত্তিক ডুপ্লিকেট নাম বাদ দিয়ে সম্পূর্ণ লাইন প্রিন্ট করবে।
উপসংহার
AWK তে ইউনিক ডেটা এক্সট্রাকশন এবং ডুপ্লিকেট রিমুভাল একটি সহজ কিন্তু কার্যকরী কাজ। অ্যারের সাহায্যে ডেটার উপস্থিতি ট্র্যাক করে শর্ত প্রয়োগ করা যায় এবং শুধুমাত্র অনন্য মান প্রিন্ট করা যায়। AWK এর এই বৈশিষ্ট্য ব্যবহার করে ডেটা বিশ্লেষণ এবং প্রক্রিয়াকরণ আরও কার্যকর করা সম্ভব।
AWK এ Numerical এবং Alphabetical Sorting এর উদাহরণ
AWK এ বিল্ট-ইনভাবে সরাসরি সোর্টিং ফাংশন নেই, তবে AWK স্ক্রিপ্টের মাধ্যমে সহজেই Numerical এবং Alphabetical সোর্টিং করা যায়। নিচে Numerical এবং Alphabetical সোর্টিং করার বিভিন্ন উদাহরণ দেওয়া হলো।
১. Numerical Sorting
Numerical সোর্টিং করার জন্য AWK এর সাথে Shell কমান্ড sort ব্যবহার করা যায়। এটি ফাইলের সংখ্যা অনুযায়ী সঠিকভাবে সজ্জিত করতে সহায়তা করে।
উদাহরণ: Numerical সোর্টিং
awk '{print $2}' data.txt | sort -nএখানে, data.txt ফাইলের দ্বিতীয় কলাম প্রিন্ট করে sort -n কমান্ডের মাধ্যমে সংখ্যাগতভাবে সজ্জিত করা হয়েছে।
-nঅপশন: সংখ্যাগত সজ্জিত করতে ব্যবহৃত হয়।
২. Alphabetical Sorting
Alphabetical সজ্জিত করার জন্য AWK এর সাথে sort কমান্ড ব্যবহার করা যায়।
উদাহরণ: Alphabetical সজ্জিত
awk '{print $1}' data.txt | sortএখানে, data.txt ফাইলের প্রথম কলাম প্রিন্ট করে sort কমান্ডের মাধ্যমে অক্ষরানুক্রমিকভাবে সজ্জিত করা হয়েছে।
৩. AWK এর মাধ্যমে Custom Sorting (Numerical)
AWK স্ক্রিপ্টের মাধ্যমে সরাসরি Numerical সজ্জিত করা সম্ভব, তবে এটি একটু জটিল হতে পারে। নিচে একটি উদাহরণ দেওয়া হলো যেখানে Numerical সজ্জিত করার জন্য একটি কাস্টম স্ক্রিপ্ট ব্যবহার করা হয়েছে।
উদাহরণ: Custom Numerical Sorting
awk '{
numbers[NR] = $1 # প্রতিটি লাইনের প্রথম কলাম অ্যারেতে রাখা হচ্ছে
}
END {
# অ্যারের উপর সোজাসুজি সজ্জিত প্রয়োগ (bubble sort)
for (i = 1; i <= NR; i++) {
for (j = i + 1; j <= NR; j++) {
if (numbers[i] > numbers[j]) {
temp = numbers[i]
numbers[i] = numbers[j]
numbers[j] = temp
}
}
}
for (i = 1; i <= NR; i++) {
print numbers[i] # সজ্জিত অ্যারের মান প্রিন্ট করা হচ্ছে
}
}' data.txtএখানে, data.txt ফাইলের প্রথম কলাম Numerical সজ্জিত করা হয়েছে এবং bubble sort অ্যালগরিদম ব্যবহার করে সজ্জিত করা হয়েছে।
৪. AWK এর মাধ্যমে Custom Sorting (Alphabetical)
AWK ব্যবহার করে Alphabetical সজ্জিত করাও সম্ভব।
উদাহরণ: Custom Alphabetical Sorting
awk '{
words[NR] = $1 # প্রতিটি লাইনের প্রথম কলাম অ্যারেতে রাখা হচ্ছে
}
END {
# অ্যারের উপর Alphabetical সজ্জিত প্রয়োগ (bubble sort)
for (i = 1; i <= NR; i++) {
for (j = i + 1; j <= NR; j++) {
if (words[i] > words[j]) {
temp = words[i]
words[i] = words[j]
words[j] = temp
}
}
}
for (i = 1; i <= NR; i++) {
print words[i] # সজ্জিত অ্যারের মান প্রিন্ট করা হচ্ছে
}
}' data.txtএখানে, data.txt ফাইলের প্রথম কলাম Alphabetical সজ্জিত করা হয়েছে।
সারসংক্ষেপ
AWK এর সাথে Shell কমান্ড sort ব্যবহার করে সহজে Numerical এবং Alphabetical সজ্জিত করা যায়। AWK এর মধ্যে কাস্টম সজ্জিত অ্যালগরিদম তৈরি করে নির্দিষ্ট ডেটা প্রক্রিয়াকরণ কাজেও ব্যবহার করা সম্ভব। এর ফলে বড় ডেটাসেটের মধ্যে সঠিকভাবে সজ্জিত ফলাফল পাওয়া যায়।
Read more