
এটি নতুন awk টিউটোরিয়াল সিরিজের প্রথম আর্টিকেল। আপকামিং সপ্তাহগুলোতে awk-এ flera আর্টিকেল পোস্ট করা হবে যা awk-এর সকল ফিচার প্র্যাকটিক্যাল উদাহরণসহ কভার করবে।
এই আর্টিকেলে, আমরা মৌলিক awk ওয়ার্কিং মেথডোলজি এবং ৭টি প্র্যাকটিক্যাল awk print উদাহরণ রিভিউ করব।
নোট: আমাদের আগের Sed Tutorial Series রিভিউ করুন।
Awk পরিচিতি এবং প্রিন্টিং অপারেশন
Awk একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ যা স্ট্রাকচারড ডেটা সহজে ম্যানিপুলেট এবং ফরম্যাটেড রিপোর্ট জেনারেট করতে দেয়। Awk এর লেখকদের নামের প্রথম অক্ষর থেকে আসে "Aho, Weinberger, এবং Kernighan"।
Awk অধিকাংশ প্যাটার্ন স্ক্যানিং এবং প্রসেসিংয়ের জন্য ব্যবহৃত হয়। এটি এক বা একাধিক ফাইল সার্চ করে দেখে সেগুলোতে নির্দিষ্ট প্যাটার্নের সাথে মিলে যাওয়া লাইন আছে কিনা এবং তারপর সংশ্লিষ্ট অ্যাকশন পারফর্ম করে।
Awk-এর কিছু মূল ফিচার:
- Awk একটি টেক্সট ফাইলকে রেকর্ড এবং ফিল্ড হিসেবে দেখে।
- সাধারণ প্রোগ্রামিং ল্যাঙ্গুয়েজের মত, Awk-এ ভেরিয়েবল, কন্ডিশনাল এবং লুপ থাকে
- Awk-এ অ্যারিথমেটিক এবং স্ট্রিং অপারেটর থাকে।
- Awk ফরম্যাটেড রিপোর্ট জেনারেট করতে পারে
Awk ফাইল থেকে বা স্ট্যান্ডার্ড ইনপুট থেকে পড়ে, এবং স্ট্যান্ডার্ড আউটপুটে আউটপুট দেয়। Awk নন-টেক্সট ফাইলের সাথে খায় না।
Syntax: awk '/search pattern1/ {Actions} /search pattern2/ {Actions}' file
উপরের awk সিন্ট্যাক্সে:
- search pattern একটি রেগুলার এক্সপ্রেশন।
- Actions – পারফর্ম করা স্টেটমেন্ট(গুলো)।
- Awk-এ একাধিক প্যাটার্ন এবং অ্যাকশন সম্ভব।
- file – ইনপুট ফাইল।
- প্রোগ্রামের চারপাশে সিঙ্গেল কোটেশন শেলকে এর স্পেশাল ক্যারেক্টার ইন্টারপ্রেট না করার জন্য।
Awk ওয়ার্কিং মেথডোলজি
- Awk ইনপুট ফাইলগুলো এক লাইন করে পড়ে।
- প্রতিটি লাইনের জন্য, এটি দिये गये প্যাটার্নের সাথে দেওয়া ক্রমে মিলিয়ে, ম্যাচ করলে সংশ্লিষ্ট অ্যাকশন পারফর্ম করে।
- কোনো প্যাটার্ন ম্যাচ না করলে, কোনো অ্যাকশন পারফর্ম হয় না।
- উপরের সিন্ট্যাক্সে, إما search pattern বা action অপশনাল, কিন্তু দুটোই একসাথে নয়।
- সার্চ প্যাটার্ন না দিলে, Awk ইনপুটের প্রতিটি লাইনের জন্য দिये गये অ্যাকশন পারফর্ম করে।
- অ্যাকশন না দিলে, দिये गये প্যাটার্নের সাথে ম্যাচ করে যেসব লাইন, সেগুলো প্রিন্ট করে যা ডিফল্ট অ্যাকশন।
- অ্যাকশন ছাড়া খালি ব্রেস কিছুই করে না। এটি ডিফল্ট প্রিন্টিং অপারেশন পারফর্ম করে না।
- Actions-এ প্রতিটি স্টেটমেন্ট সেমিকোলন দিয়ে ডিলিমিটেড হতে হবে।
নিচের উদাহরণগুলোতে ব্যবহৃত employee.txt ফাইল তৈরি করুন যেটে নিচের কন্টেন্ট আছে।
$cat employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
Awk উদাহরণ ১. Awk-এর ডিফল্ট বিহেভিয়ার
ডিফল্টভাবে Awk ফাইল থেকে প্রতিটি লাইন প্রিন্ট করে।
$ awk '{print;}' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
উপরের উদাহরণে প্যাটার্ন দেওয়া নেই। তাই অ্যাকশনগুলো সব লাইনের জন্য প্রযোজ্য। আর্গুমেন্ট ছাড়া print অ্যাকশন ডিফল্টভাবে পুরো লাইন প্রিন্ট করে। তাই এটি ফাইলের সব লাইন ফেইল ছাড়া প্রিন্ট করে। Actions ব্রেসের মধ্যে incloজড হতে হবে।
Awk উদাহরণ ২. প্যাটার্নের সাথে ম্যাচ করা লাইনগুলো প্রিন্ট করুন।
$ awk '/Thomas/ > /Nisha/' employee.txt 100 Thomas Manager Sales $5,000 400 Nisha Manager Marketing $9,500
উপরের উদাহরণে 'Thomas' বা 'Nisha' সাথে ম্যাচ করা সব লাইন প্রিন্ট করে। এতে দুটি প্যাটার্ন আছে। Awk যেকোনো সংখ্যক প্যাটার্ন এক্সেপ্ট করে, কিন্তু প্রতিটি সেট (প্যাটার্ন এবং এর সংশ্লিষ্ট অ্যাকশন) নিউলাইন দিয়ে সেপারেটেড হতে হবে।
Awk উদাহরণ ৩. শুধু নির্দিষ্ট ফিল্ড প্রিন্ট করুন।
Awk-এ বেশ কিছু বিল্ট-ইন ভেরিয়েবল আছে। প্রতিটি রেকর্ড মানে লাইনের জন্য, এটি রেকর্ডটি ডিফল্টভাবে হোয়াইটস্পেস ক্যারেক্টার দিয়ে ডিলিমিট করে $n ভেরিয়েবলগুলোতে স্টোর করে। লাইনে ৪টি ওয়ার্ড থাকলে, সেগুলো $1, $2, $3 এবং $4-তে স্টোর হবে। $0 পুরো লাইন রিপ্রেজেন্ট করে। NF একটি বিল্ট-ইন ভেরিয়েবল যা একটি রেকর্ডে মোট ফিল্ড সংখ্যা রিপ্রেজেন্ট করে।
$ awk '{print $2,$5;}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,000 $ awk '{print $2,$NF;}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,000
উপরের উদাহরণে $2 এবং $5 যথাক্রমে নাম এবং স্যালারি রিপ্রেজেন্ট করে। $NF ব্যবহার করেও স্যালারি পাওয়া যায়, যেখানে $NF লাস্ট ফিল্ড রিপ্রেজেন্ট করে। প্রিন্ট স্টেটমেন্টে ‘,’ একটি কনক্যাটেনেটর।
Awk উদাহরণ ৪. ইনিশিয়ালাইজেশন এবং ফাইনাল অ্যাকশন
Awk-এ দুটি গুরুত্বপূর্ণ প্যাটার্ন আছে যা BEGIN এবং END কীওয়ার্ড দিয়ে স্পেসিফাইড।
Syntax: BEGIN { Actions} {ACTION} # Action for everyline in a file END { Actions } # Awk-এ কমেন্টের জন্য #
BEGIN সেকশনে স্পেসিফাইড অ্যাকশন ইনপুট থেকে লাইন পড়া শুরু করার আগে এক্সিকিউট হবে।
END অ্যাকশন ইনপুট থেকে লাইন পড়া এবং প্রসেসিং কমপ্লিট হওয়ার পর পারফর্ম হবে।
$ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";} > {print $2,"\t",$3,"\t",$4,"\t",$NF;} > END{print "Report Generated\n--------------"; > }' employee.txt Name Designation Department Salary Thomas Manager Sales $5,000 Jason Developer Technology $5,500 Sanjay Sysadmin Technology $7,000 Nisha Manager Marketing $9,500 Randy DBA Technology $6,000 Report Generated --------------
উপরের উদাহরণে, এটি রিপোর্টের জন্য হেডলাইন এবং লাস্ট লাইন প্রিন্ট করে।
Awk উদাহরণ ৫. যেসব ইম্প্লয়ির ইম্প্লয়ি আইডি ২০০-এর চেয়ে বড় সেগুলো খুঁজুন
$ awk '$1 >200' employee.txt 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
উপরের উদাহরণে, প্রথম ফিল্ড ($1) ইম্প্লয়ি আইডি। তাই যদি $1 ২০০-এর চেয়ে বড় হয়, তবে ডিফল্ট প্রিন্ট অ্যাকশন করুন পুরো লাইন প্রিন্ট করতে।
Awk উদাহরণ ৬. Technology ডিপার্টমেন্টের ইম্প্লয়ি লিস্ট প্রিন্ট করুন
এখন ডিপার্টমেন্ট নাম চতুর্থ ফিল্ডে উপলব্ধ, তাই চেক করুন $4 "Technology" স্ট্রিংয়ের সাথে ম্যাচ করে কিনা, হ্যাঁ হলে লাইন প্রিন্ট করুন।
$ awk '$4 ~/Technology/' employee.txt 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 500 Randy DBA Technology $6,000
অপারেটর ~ রেগুলার এক্সপ্রেশন এর সাথে কমপেয়ারের জন্য। ম্যাচ করলে ডিফল্ট অ্যাকশন মানে পুরো লাইন প্রিন্ট হবে।
Awk উদাহরণ ৭. Technology ডিপার্টমেন্টে ইম্প্লয়ির সংখ্যা প্রিন্ট করুন
নিচের উদাহরণটি চেক করে ডিপার্টমেন্ট Technology কিনা, হ্যাঁ হলে অ্যাকশনে কাউন্ট ভেরিয়েবল ইনক্রিমেন্ট করুন, যা BEGIN সেকশনে শূন্য দিয়ে ইনিশিয়ালাইজড ছিল।
$ awk 'BEGIN { count=0;} $4 ~ /Technology/ { count++; } END { print "Number of employees in Technology Dept =",count;}' employee.txt Number of employees in Tehcnology Dept = 3
তারপর প্রসেসের শেষে, কাউন্টের ভ্যালু প্রিন্ট করুন যা আপনাকে Technology ডিপার্টমেন্টে ইম্প্লয়ির সংখ্যা দেবে।
প্রস্তাবিত পাঠ্য
Sed and Awk 101 Hacks, লেখক রামেশ নেটারাজান. আমি ইউনিক্স/লিনাক্স এনভায়রনমেন্টে টেক্সট ফাইল (ডেটা, কনফিগ, এবং লগ ফাইল) নিয়ে দিনে কয়েক ঘন্টা কাটাই। আমি আমার সব টেক্সট ম্যানিপুলেশন কাজের জন্য Sed এবং Awk ব্যবহার করি। আমার Sed এবং Awk অভিজ্ঞতার উপর ভিত্তি করে, আমি Sed and Awk 101 Hacks ইবুক লিখেছি যাতে ১০১টি প্র্যাকটিক্যাল উদাহরণ আছে Sed এবং Awk-এর বিভিন্ন অ্যাডভান্সড ফিচারের ওপর যা আপনার UNIX/Linux লাইফ উন্নত করবে। এমনকি আপনি যদি বহু বছর ধরে Sed এবং Awk ব্যবহার করে থাকেন এবং এই বইটি না পড়েছেন, তবে দয়া করে নিজের ভালো জন্য এই বইটি পড়ুন। আপনি Sed এবং Awk ইউটিলিটির ক্ষমতা দেখে চকিত হবেন।
অতিরিক্ত Awk আর্টিকেল
- Awk ইউজার-ডিফাইনড ভেরিয়েবল ৩টি প্র্যাকটিক্যাল উদাহরণসহ
- ৮টি পাওয়ারফুল Awk বিল্ট-ইন ভেরিয়েবল – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
- ৭টি পাওয়ারফুল Awk অপারেটর উদাহরণ (Unary, Binary, Arithmetic, String, Assignment, Conditional, Reg-Ex Awk Operators)
- ৪টি Awk If স্টেটমেন্ট উদাহরণ ( if, if else, if else if, : ? )
- লুপে আটকিয়ে পড়েছেন? Awk While, Do While, For Loop, Break, Continue, Exit উদাহরণ