AWK একটি শক্তিশালী টুল যা টেক্সট ডেটা প্রসেসিং এবং ফিল্টারিংয়ে বিশেষজ্ঞ। এটি ডেটা থেকে নির্দিষ্ট প্যাটার্ন বের করতে এবং প্রয়োজনীয় আউটপুট প্রদানে সহায়তা করে। যদিও AWK নিজেই সরাসরি ডেটা সর্টিং (sorting) ফাংশন প্রদান করে না, তবে এটি ব্যবহার করে সহজ পদ্ধতিতে ডেটা ফিল্টার করা যায় এবং Shell কমান্ড বা অন্যান্য টুলের সঙ্গে ব্যবহার করে সর্টিং করা সম্ভব।
AWK এর মাধ্যমে নির্দিষ্ট প্যাটার্নের ভিত্তিতে ডেটা ফিল্টার করা যায়। AWK এ নিয়মিত এক্সপ্রেশন এবং শর্ত ব্যবহার করে ডেটা ফিল্টার করা খুবই সহজ।
awk '/pattern/ {print $0}' filename.txt
এটি filename.txt
ফাইলের মধ্যে pattern
শব্দটি থাকা প্রতিটি লাইন প্রিন্ট করবে।
awk '$3 > 100 {print $1, $3}' filename.txt
এটি filename.txt
ফাইলের তৃতীয় কলামের মান ১০০ এর বেশি হলে প্রথম এবং তৃতীয় কলাম প্রিন্ট করবে।
AWK এ লজিক্যাল অপারেটর (&&
, ||
) ব্যবহার করে একাধিক শর্তের ভিত্তিতে ডেটা ফিল্টার করা যায়।
awk '$2 > 50 && $3 < 200 {print $1, $2, $3}' filename.txt
এটি filename.txt
ফাইলের দ্বিতীয় কলামের মান ৫০ এর বেশি এবং তৃতীয় কলামের মান ২০০ এর কম হলে প্রথম তিনটি কলাম প্রিন্ট করবে।
যদিও AWK নিজেই ডেটা সর্টিং করতে পারে না, তবে sort
কমান্ড ব্যবহার করে Shell এর মধ্যে AWK এর আউটপুট সর্ট করা যায়।
awk '{print $1, $3}' filename.txt | sort -k2,2n
এটি filename.txt
ফাইলের প্রথম এবং তৃতীয় কলাম প্রিন্ট করবে এবং তৃতীয় কলামের মানের ভিত্তিতে সংখ্যা অনুযায়ী সর্ট করবে।
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 সংস্করণে উপলব্ধ।
sort
কমান্ডের ব্যবহারAWK এর সঙ্গে sort
কমান্ড ব্যবহার করে দ্রুত এবং কার্যকরভাবে ডেটা সর্ট করা সম্ভব।
awk '{print $2, $1}' filename.txt | sort -k1,1 -r
এটি filename.txt
ফাইলের দ্বিতীয় এবং প্রথম কলাম প্রিন্ট করবে এবং প্রথম কলামের মান অনুযায়ী রিভার্স সর্ট করবে।
AWK ব্যবহার করে ডেটা ফিল্টার করা সহজ এবং কার্যকর। যদিও AWK নিজেই সরাসরি ডেটা সর্ট করতে পারে না, Shell এর অন্যান্য টুল যেমন sort
ব্যবহার করে AWK এর আউটপুট সর্ট করা যায়। AWK এর মাধ্যমে ফিল্টারিং এবং Shell এর সর্টিং ক্ষমতা একত্রে ব্যবহার করে ব্যবহারকারীরা বড় আকারের ডেটাসেট সহজেই বিশ্লেষণ করতে পারেন।
Data Filtering হল ডেটা প্রক্রিয়াকরণের একটি গুরুত্বপূর্ণ প্রক্রিয়া, যার মাধ্যমে বড় ডেটাসেট থেকে নির্দিষ্ট প্যাটার্ন বা শর্ত অনুযায়ী ডেটা বের করা হয়। AWK, Python, এবং Shell স্ক্রিপ্টের মতো টুল এবং প্রোগ্রামিং ভাষাগুলিতে ডেটা ফিল্টারিং প্রক্রিয়াটি সহজে করা যায়। এখানে AWK-এর মাধ্যমে Data Filtering-এর কিছু গুরুত্বপূর্ণ টেকনিক এবং তার প্রয়োগ নিয়ে আলোচনা করা হলো।
AWK-তে ডেটা ফিল্টারিং সাধারণত শর্ত (condition
) ব্যবহার করে করা হয়। AWK প্রতিটি লাইনের ডেটা পড়ে এবং যদি শর্ত সত্য হয়, তাহলে নির্দিষ্ট কার্যক্রম (action
) কার্যকর হয়।
awk '$3 > 50 { print $0 }' data.txt
এই কমান্ডটি data.txt
ফাইলের তৃতীয় ফিল্ডের মান 50 এর বেশি হলে পুরো লাইন প্রিন্ট করবে।
AWK-তে নির্দিষ্ট শব্দ বা প্যাটার্নের সাথে মিলে যাওয়া লাইন ফিল্টার করার জন্য নিয়মিত এক্সপ্রেশন ব্যবহার করা যায়।
awk '/error/ { print $0 }' logfile.txt
এই কমান্ডটি logfile.txt
ফাইল থেকে error
শব্দটি থাকা সব লাইন প্রিন্ট করবে।
AWK ব্যবহার করে নির্দিষ্ট ফিল্ডের মানের ভিত্তিতে ডেটা ফিল্টার করা যায়। $
চিহ্ন ব্যবহার করে ফিল্ড নির্বাচন করা হয়।
awk '$1 == "Alice" { print $2, $3 }' data.txt
এই কমান্ডটি data.txt
ফাইল থেকে প্রথম ফিল্ডে "Alice" থাকা লাইনগুলির দ্বিতীয় এবং তৃতীয় ফিল্ড প্রিন্ট করবে।
AWK-তে লজিক্যাল অপারেটর (&&
, ||
, !
) ব্যবহার করে একাধিক শর্ত একসাথে মিলিয়ে ডেটা ফিল্টার করা যায়।
awk '$2 > 20 && $3 < 100 { print $1, $2, $3 }' data.txt
এই কমান্ডটি data.txt
ফাইল থেকে সেই লাইনগুলো প্রিন্ট করবে যেগুলির দ্বিতীয় ফিল্ডের মান 20 এর বেশি এবং তৃতীয় ফিল্ডের মান 100 এর কম।
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 এর বেশি হলে সেগুলোর সংখ্যা গণনা করবে এবং শেষে আউটপুট প্রিন্ট করবে।
AWK-এর ~
অপারেটর ব্যবহার করে ফিল্ডের মধ্যে নিয়মিত এক্সপ্রেশন মিল খুঁজে বের করা যায়।
awk '$1 ~ /^[A-Z]/ { print $0 }' data.txt
এই কমান্ডটি data.txt
ফাইল থেকে প্রথম ফিল্ডে বড় হাতের অক্ষর দিয়ে শুরু হওয়া লাইনগুলো প্রিন্ট করবে।
ফিল্টার করা ডেটা সংরক্ষণ করা:
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 সাধারণত ডেটা প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়, তবে এতে বিল্ট-ইন sort
ফাংশন নেই। তবে, AWK এ আমরা ডেটা সনির্দিষ্টভাবে সাজানোর জন্য কাস্টম ফাংশন তৈরি করতে পারি। এখানে, AWK এ কীভাবে ডেটা সনির্দিষ্টভাবে সাজানো যায় এবং কাস্টম সোর্ট ফাংশন ব্যবহার করা যায় তার উদাহরণ দেওয়া হলো।
যদিও AWK নিজে থেকেই ডেটা সোর্ট করার জন্য বিল্ট-ইন ফাংশন সরবরাহ করে না, AWK স্ক্রিপ্টের মধ্যে অ্যারে ব্যবহার করে এবং বাইরের কমান্ড যেমন sort
ব্যবহার করে ডেটা সনির্দিষ্টভাবে সাজানো যায়।
sort
কমান্ড ব্যবহারAWK এর আউটপুট পাইপলাইনের মাধ্যমে sort
কমান্ডে পাঠিয়ে সহজেই ডেটা সনির্দিষ্টভাবে সাজানো যায়।
awk '{print $1, $2}' filename.txt | sort -k2,2n
এখানে, filename.txt
ফাইলের প্রথম এবং দ্বিতীয় কলাম প্রিন্ট করা হয়েছে এবং sort -k2,2n
দ্বারা দ্বিতীয় কলাম অনুযায়ী সনির্দিষ্টভাবে সাজানো হয়েছে।
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 এ অ্যারে এবং লজিক্যাল অপারেটর ব্যবহার করে আপনি আপনার নিজের সনির্দিষ্ট ফাংশন তৈরি করতে পারেন যা ডেটা প্রক্রিয়াকরণের ক্ষমতা বাড়ায়।
AWK তে ডেটা প্রক্রিয়াকরণের সময় সাধারণত ডুপ্লিকেট ডেটা মুছে ফেলা বা অনন্য ডেটা বের করা একটি গুরুত্বপূর্ণ কাজ। AWK এর শক্তিশালী ডেটা ম্যানিপুলেশন ক্ষমতা ব্যবহার করে সহজেই ইউনিক ডেটা এক্সট্রাকশন এবং ডুপ্লিকেট রিমুভাল করা যায়।
AWK তে অ্যারে ব্যবহার করে অনন্য ডেটা এক্সট্রাক্ট করা যায়। প্রতিটি ডেটা ইনডেক্স হিসেবে অ্যারেতে সংরক্ষণ করা হলে, ডুপ্লিকেট ডেটা স্বয়ংক্রিয়ভাবে একবারই সংরক্ষিত হয়।
awk '!seen[$0]++ { print }' data.txt
ব্যাখ্যা:
!seen[$0]++
শর্তটি চেক করে যে $0
(সম্পূর্ণ লাইন) অ্যারেতে আগে ছিল কিনা।seen[$0]
এর মান 0
থাকে এবং এটি প্রিন্ট হয়। পরবর্তীতে একই লাইন আবার পাওয়া গেলে শর্তটি মিথ্যা হয় এবং প্রিন্ট হয় না।awk '!seen[$1]++ { print $1 }' data.txt
এটি data.txt
ফাইলের প্রথম কলামের অনন্য মানগুলো প্রিন্ট করবে।
ডুপ্লিকেট ডেটা রিমুভ করতে AWK তে অ্যারের সাহায্যে সহজেই শর্ত ব্যবহার করা যায়।
awk '!seen[$0]++' data.txt > unique_data.txt
ব্যাখ্যা:
!seen[$0]++
শর্তের মাধ্যমে data.txt
ফাইলের ডুপ্লিকেট লাইন বাদ দেওয়া হয়েছে।unique_data.txt
ফাইলে সংরক্ষিত হয়েছে।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 এ বিল্ট-ইনভাবে সরাসরি সোর্টিং ফাংশন নেই, তবে AWK স্ক্রিপ্টের মাধ্যমে সহজেই Numerical এবং Alphabetical সোর্টিং করা যায়। নিচে Numerical এবং Alphabetical সোর্টিং করার বিভিন্ন উদাহরণ দেওয়া হলো।
Numerical সোর্টিং করার জন্য AWK এর সাথে Shell কমান্ড sort
ব্যবহার করা যায়। এটি ফাইলের সংখ্যা অনুযায়ী সঠিকভাবে সজ্জিত করতে সহায়তা করে।
awk '{print $2}' data.txt | sort -n
এখানে, data.txt
ফাইলের দ্বিতীয় কলাম প্রিন্ট করে sort -n
কমান্ডের মাধ্যমে সংখ্যাগতভাবে সজ্জিত করা হয়েছে।
-n
অপশন: সংখ্যাগত সজ্জিত করতে ব্যবহৃত হয়।Alphabetical সজ্জিত করার জন্য AWK এর সাথে sort
কমান্ড ব্যবহার করা যায়।
awk '{print $1}' data.txt | sort
এখানে, data.txt
ফাইলের প্রথম কলাম প্রিন্ট করে sort
কমান্ডের মাধ্যমে অক্ষরানুক্রমিকভাবে সজ্জিত করা হয়েছে।
AWK স্ক্রিপ্টের মাধ্যমে সরাসরি Numerical সজ্জিত করা সম্ভব, তবে এটি একটু জটিল হতে পারে। নিচে একটি উদাহরণ দেওয়া হলো যেখানে Numerical সজ্জিত করার জন্য একটি কাস্টম স্ক্রিপ্ট ব্যবহার করা হয়েছে।
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 ব্যবহার করে Alphabetical সজ্জিত করাও সম্ভব।
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 এর মধ্যে কাস্টম সজ্জিত অ্যালগরিদম তৈরি করে নির্দিষ্ট ডেটা প্রক্রিয়াকরণ কাজেও ব্যবহার করা সম্ভব। এর ফলে বড় ডেটাসেটের মধ্যে সঠিকভাবে সজ্জিত ফলাফল পাওয়া যায়।
common.read_more