কম্পিউটার টিউটোরিয়াল

AWK কমান্ড ও স্ক্রিপ্ট লেখার সম্পূর্ণ গাইড: টেক্সট প্রসেসিংয়ের শক্তিশালী টুল

awk কমান্ড টেক্সট ফাইল প্রসেস বা বিশ্লেষণ করার একটি শক্তিশালী পদ্ধতি। বিশেষ করে এটি সারি (rows) এবং কলাম দিয়ে সংগঠিত ডেটা ফাইল বিশ্লেষণ করে। সিম্পল awk কমান্ড কমান্ড লাইন থেকে চালানো যায়। জটিল কাজের জন্য awk প্রোগ্রাম (awk scripts) ফাইলে লিখে রাখা উচিত।

AWK কমান্ড ও স্ক্রিপ্ট লেখার সম্পূর্ণ গাইড: টেক্সট প্রসেসিংয়ের শক্তিশালী টুল

AWK-এর মৌলিক ধারণা

awk কমান্ডের বেসিক ফরম্যাট এমন:

awk 'pattern {action}' input-file > output-file

এর অর্থ: ইনপুট ফাইলের প্রতিটি লাইন নিন; যদি লাইনটি প্যাটার্ন.match করে, তবে অ্যাকশন প্রয়োগ করে ফলাফল আউটপুট ফাইলে লিখুন। প্যাটার্ন না থাকলে সব লাইনে অ্যাকশন প্রয়োগ হবে। উদাহরণ:

awk '{ print $5 }' table1.txt > output1.txt

উপরের স্টেটমেন্ট প্রতিটি লাইনের ৫ম কলামের এলিমেন্ট নিয়ে আউটপুট ফাইলে "output.txt"-এ লিখে। '$4' ভেরিয়েবল ৪র্থ কলামকে রেফার করে। একইভাবে $1, $2, $3 দিয়ে প্রথম, দ্বিতীয়, তৃতীয় কলাম এক্সেস করা যায়। ডিফল্টভাবে কলামগুলো স্পেস বা ট্যাব (white space) দিয়ে পৃথক থাকা অনুমান করা হয়। যদি "table1.txt" এ নিচের লাইনগুলো থাকে:

1, Justin Timberlake, Title 545, Price $7.30
2, Taylor Swift, Title 723, Price $7.90
3, Mick Jagger, Title 610, Price $7.90
4, Lady Gaga, Title 118, Price $7.30
5, Johnny Cash, Title 482, Price $6.50
6, Elvis Presley, Title 335, Price $7.30
7, John Lennon, Title 271, Price $7.90
8, Michael Jackson, Title 373, Price $5.50

তবে কমান্ডটি আউটপুট ফাইলে নিচের লাইনগুলো লিখবে:

545,
723,
610,
118,
482,
335,
271,
373,

যদি কলাম সেপারেটর স্পেস বা ট্যাব না হয়ে অন্য কিছু হয় (যেমন কমা), তবে awk স্টেটমেন্টে সেটি নির্দিষ্ট করা যায়:

awk -F, '{ print $3 }' table1.txt > output1.txt

এটি কমা দিয়ে কলাম পৃথক থাকলে প্রতিটি লাইনের ৩ নম্বর কলামের এলিমেন্ট সিলেক্ট করবে। তাই আউটপুট হবে:

Title 545
Title 723
Title 610
Title 118
Title 482
Title 335
Title 271
Title 373

AWK-এ কন্ডিশনাল এক্সপ্রেশন

কার্লি ব্র্যাকেটের ('{','}') ভেতরের স্টেটমেন্ট লিস্টকে একটি ব্লক বলা হয়। একটি ব্লকের সামনে কন্ডিশনাল এক্সপ্রেশন রাখলে, ব্লকের ভেতরের স্টেটমেন্ট শুধু তখন এক্সিকিউট হবে যখন কন্ডিশন সত্য হবে।

awk '$7=="\$7.30" { print $3 }' table1.txt

এখানে কন্ডিশন $7=="\$7.30", অর্থাৎ ৭ নম্বর কলামের এলিমেন্ট $7.30-এর সমান। ডলার সাইনের আগে ব্যাকস্ল্যাশ ব্যবহার করা হয়েছে যাতে সিস্টেম $7 কে ভেরিয়েবল না মনে করে ডলার সাইন বুঝে।

সুতরাং এই awk স্টেটমেন্ট কলাম ৭-এ "$7.30" থাকা লাইনগুলোর ৩ নম্বর কলামের এলিমেন্ট প্রিন্ট করবে।

রেগুলার এক্সপ্রেশনও কন্ডিশন হিসেবে ব্যবহার করা যায়। উদাহরণ:

awk '/30/ { print $3 }' table1.txt

দুই স্ল্যাশ ('/') এর মাঝপথের স্ট্রিংটি রেগুলার এক্সপ্রেশন। এখানে শুধু "30" স্ট্রিং। এর মানে যদি কোনো লাইনে "30" স্ট্রিং থাকে, তবে সেটার ৩ নম্বর কলামের এলিমেন্ট প্রিন্ট করবে। উপরের উদাহরণের আউটপুট হবে:

Timberlake,
Gaga,
Presley,

AWK-এ ক্যালকুলেশন করা

টেবিল এলিমেন্টগুলো নম্বর হলে awk দিয়ে ক্যালকুলেশন করা যায়, যেমন:

awk '{ print ($2 * $3) + $7 }'

বর্তমান সারির এলিমেন্ট এক্সেস করার ভেরিয়েবল ($1, $2, ইত্যাদি) ছাড়াও $0 ভেরিয়েবল পুরো সারি (লাইন) কে রেফার করে, এবং NF ভেরিয়েবল ফিল্ডের সংখ্যা ধারণ করে।

নতুন ভেরিয়েবলও ডিফাইন করা যায়, যেমন:

awk '{ sum=0; for (col=1; col<=NF; col++) sum += $col; print sum; }'

এটি প্রতিটি সারির সব এলিমেন্টের যোগফল কম্পিউট করে প্রিন্ট করে।

Awk স্টেটমেন্ট ঘন ঘন sed কমান্ডের সাথে কম্বাইন করা হয়।

  1. কমান্ড লাইনে ডেটা ট্রান্সফারের জন্য cURL-এর সম্পূর্ণ ব্যবহার গাইড

  2. লিনাক্স থেকে উইন্ডোজ পার্টিশনে রাইট করার পদ্ধতি

  3. বেসিক ক্রোম এক্সটেনশন লেখা ও তৈরি করার পদ্ধতি

  4. iOS 13-এ NFC ট্যাগ অপারেশন আয়ত্ত করুন: পড়া, লেখা এবং স্মার্ট ট্যাগ ব্যবহার