
এটি নতুন awk টিউটোরিয়াল সিরিজের প্রথম নিবন্ধ। আমরা আসন্ন সপ্তাহগুলিতে awk-এ বেশ কয়েকটি নিবন্ধ পোস্ট করব যা ব্যবহারিক উদাহরণ সহ awk-এর সমস্ত বৈশিষ্ট্যকে কভার করবে।
এই নিবন্ধে, আসুন আমরা 7টি ব্যবহারিক awk প্রিন্ট উদাহরণ সহ মৌলিক awk কাজের পদ্ধতি পর্যালোচনা করি।
দ্রষ্টব্য: নিশ্চিত করুন যে আপনি আমাদের আগের সেড টিউটোরিয়াল সিরিজ পর্যালোচনা করুন৷
Awk পরিচিতি এবং প্রিন্টিং অপারেশনস
Awk হল একটি প্রোগ্রামিং ভাষা যা স্ট্রাকচার্ড ডেটার সহজে ম্যানিপুলেশন এবং ফর্ম্যাটেড রিপোর্ট তৈরি করতে দেয়। Awk এর লেখকদের নাম বোঝায় “A ho, W einberger, এবং K ernighan”
Awk বেশিরভাগ প্যাটার্ন স্ক্যানিং এবং প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। এটি নির্দিষ্ট প্যাটার্নের সাথে মেলে এমন লাইন আছে কিনা তা দেখতে এটি এক বা একাধিক ফাইল অনুসন্ধান করে এবং তারপরে সংশ্লিষ্ট ক্রিয়াগুলি সম্পাদন করে৷
Awk এর কিছু মূল বৈশিষ্ট্য হল:
- Awk একটি টেক্সট ফাইলকে রেকর্ড এবং ক্ষেত্র হিসেবে দেখে।
- সাধারণ প্রোগ্রামিং ভাষার মতো, Awk-এর ভেরিয়েবল, শর্তসাপেক্ষ এবং লুপ রয়েছে
- Awk এর পাটিগণিত এবং স্ট্রিং অপারেটর রয়েছে।
- Awk ফর্ম্যাট করা রিপোর্ট তৈরি করতে পারে
Awk একটি ফাইল থেকে বা এর স্ট্যান্ডার্ড ইনপুট থেকে পড়ে এবং এর স্ট্যান্ডার্ড আউটপুটে আউটপুট দেয়। Awk নন-টেক্সট ফাইলের সাথে যায় না।
Syntax:
awk '/search pattern1/ {Actions}
/search pattern2/ {Actions}' file উপরের awk সিনট্যাক্সে:
- সার্চ প্যাটার্ন হল একটি রেগুলার এক্সপ্রেশন।
- ক্রিয়া - বিবৃতি(গুলি) সম্পাদন করতে হবে।
- অভিক-এ বেশ কিছু প্যাটার্ন এবং অ্যাকশন সম্ভব।
- ফাইল – ইনপুট ফাইল।
- প্রোগ্রামের চারপাশে একক উদ্ধৃতি হল শেল এড়ানো যাতে এর কোনো বিশেষ অক্ষর ব্যাখ্যা না করা যায়।
Awk কাজের পদ্ধতি
- Awk ইনপুট ফাইলগুলি একবারে একটি লাইন পড়ে৷
- প্রতিটি লাইনের জন্য, এটি প্রদত্ত ক্রমে প্রদত্ত প্যাটার্নের সাথে মেলে, যদি মিলগুলি সংশ্লিষ্ট ক্রিয়া সম্পাদন করে।
- যদি কোনো প্যাটার্ন মেলে না, কোনো কাজ করা হবে না।
- উপরের সিনট্যাক্সে, হয় অনুসন্ধান প্যাটার্ন বা ক্রিয়া ঐচ্ছিক, কিন্তু উভয়ই নয়।
- যদি সার্চ প্যাটার্ন দেওয়া না থাকে, তাহলে Awk ইনপুটের প্রতিটি লাইনের জন্য প্রদত্ত ক্রিয়া সম্পাদন করে।
- অ্যাকশন দেওয়া না হলে, প্রদত্ত প্যাটার্নের সাথে মেলে সেই সমস্ত লাইন প্রিন্ট করুন যা ডিফল্ট অ্যাকশন।
- কোনও ক্রিয়া ছাড়াই খালি বন্ধনী কিছুই করে না। এটি ডিফল্ট প্রিন্টিং অপারেশন সম্পাদন করবে না৷
- ক্রিয়াগুলির প্রতিটি বিবৃতি সেমিকোলন দ্বারা সীমাবদ্ধ করা উচিত৷ ৷
আসুন আমরা 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 উদাহরণ 1. 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
উপরের উদাহরণে প্যাটার্ন দেওয়া হয়নি। তাই কর্ম সব লাইন প্রযোজ্য.
কোনো যুক্তি ছাড়াই অ্যাকশন প্রিন্ট ডিফল্টরূপে পুরো লাইনটি প্রিন্ট করে। তাই এটা সব প্রিন্ট
ব্যর্থ ছাড়া ফাইলের লাইন. অ্যাকশনগুলিকে ব্রেসের সাথে আবদ্ধ করতে হবে।
Awk উদাহরণ 2. প্যাটার্নের সাথে মেলে এমন লাইনগুলি প্রিন্ট করুন।
$ awk '/Thomas/ > /Nisha/' employee.txt 100 Thomas Manager Sales $5,000 400 Nisha Manager Marketing $9,500
উপরের উদাহরণে এটি সমস্ত লাইন প্রিন্ট করে যা 'থমাস' বা 'নিশা'-এর সাথে মেলে। এর দুটি প্যাটার্ন আছে। Awk যেকোন সংখ্যক প্যাটার্ন গ্রহণ করে, কিন্তু প্রতিটি সেট (প্যাটার্ন এবং এর সংশ্লিষ্ট ক্রিয়া) নতুন লাইন দ্বারা আলাদা করতে হবে।
Awk উদাহরণ 3. শুধুমাত্র নির্দিষ্ট ক্ষেত্র মুদ্রণ করুন।
Awk এর ভেরিয়েবলের সংখ্যা রয়েছে। প্রতিটি রেকর্ডের জন্য অর্থাৎ লাইনের জন্য, এটি ডিফল্টরূপে হোয়াইটস্পেস অক্ষর দ্বারা সীমাবদ্ধ রেকর্ডটিকে বিভক্ত করে এবং $n ভেরিয়েবলে সংরক্ষণ করে। লাইনে 4টি শব্দ থাকলে, এটি $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 উদাহরণ 4. সূচনা এবং চূড়ান্ত ক্রিয়া
Awk-এর দুটি গুরুত্বপূর্ণ প্যাটার্ন রয়েছে যা BEGIN এবং END নামক কীওয়ার্ড দ্বারা নির্দিষ্ট করা হয়।
Syntax:
BEGIN { Actions}
{ACTION} # Action for everyline in a file
END { Actions }
# is for comments in Awk
ইনপুট থেকে লাইন পড়া শুরু করার আগে BEGIN বিভাগে নির্দিষ্ট করা ক্রিয়াগুলি কার্যকর করা হবে৷
ইনপুট থেকে লাইনগুলি পড়া এবং প্রক্রিয়া করার পরে শেষের ক্রিয়াগুলি সম্পাদন করা হবে৷
$ 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 উদাহরণ 5. 200 এর বেশি কর্মচারী আইডি আছে এমন কর্মচারীদের খুঁজুন
$ 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 200-এর বেশি হয়, তাহলে পুরো লাইনটি প্রিন্ট করার জন্য ডিফল্ট প্রিন্ট অ্যাকশন করুন।
Awk উদাহরণ 6. প্রযুক্তি বিভাগের কর্মচারীদের তালিকা প্রিন্ট করুন
এখন ডিপার্টমেন্টের নাম একটি চতুর্থ ক্ষেত্র হিসাবে উপলব্ধ, তাই "প্রযুক্তি" স্ট্রিং এর সাথে $4 মেলে কিনা তা পরীক্ষা করতে হবে, যদি হ্যাঁ লাইনটি প্রিন্ট করুন।
$ awk '$4 ~/Technology/' employee.txt 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 500 Randy DBA Technology $6,000
অপারেটর ~ রেগুলার এক্সপ্রেশনের সাথে তুলনা করার জন্য। যদি এটি ডিফল্ট অ্যাকশনের সাথে মেলে যেমন পুরো লাইনটি প্রিন্ট করা হবে।
Awk উদাহরণ 7. প্রযুক্তি বিভাগে কর্মচারীদের সংখ্যা মুদ্রণ করুন
নীচের উদাহরণ, বিভাগটি প্রযুক্তি কিনা তা পরীক্ষা করে, যদি হ্যাঁ হয়, অ্যাকশনে, শুধু গণনা পরিবর্তনশীলটি বৃদ্ধি করুন, যা 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 তারপর প্রক্রিয়া শেষে, শুধুমাত্র গণনার মান প্রিন্ট করুন যা আপনাকে প্রযুক্তি বিভাগে কর্মচারীর সংখ্যা দেয়।
প্রস্তাবিত পড়া
রমেশ নটরাজন দ্বারা Sed এবং Awk 101 হ্যাকস . টেক্সট ফাইল (ডেটা, কনফিগার, এবং লগ ফাইল) নিয়ে কাজ করার জন্য আমি ইউনিক্স/লিনাক্স পরিবেশে দিনে কয়েক ঘন্টা ব্যয় করি। আমি আমার সমস্ত পাঠ্য ম্যানিপুলেশন কাজের জন্য Sed এবং Awk ব্যবহার করি। আমার Sed এবং Awk অভিজ্ঞতার উপর ভিত্তি করে, আমি Sed এবং Awk 101 Hacks eBook লিখেছি যাতে Sed এবং Awk-এর বিভিন্ন উন্নত বৈশিষ্ট্যের 101টি বাস্তব উদাহরণ রয়েছে যা আপনার UNIX/Linux জীবনকে উন্নত করবে। এমনকি আপনি যদি কয়েক বছর ধরে Sed এবং Awk ব্যবহার করে থাকেন এবং এই বইটি না পড়ে থাকেন, তাহলে অনুগ্রহ করে নিজের একটি উপকার করুন এবং এই বইটি পড়ুন। আপনি Sed এবং Awk ইউটিলিটিগুলির ক্ষমতা দেখে বিস্মিত হবেন৷
অতিরিক্ত Awk নিবন্ধগুলি
- 3টি ব্যবহারিক উদাহরণ সহ Awk ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবল
- 8 শক্তিশালী Awk বিল্ট-ইন ভেরিয়েবল – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
- 7 শক্তিশালী Awk অপারেটর উদাহরণ (Unary, Binary, Arithmetic, String, Assignment, Conditional, Reg-ex Awk অপারেটর)
- 4 Awk If স্টেটমেন্টের উদাহরণ ( if, if else, if else if, :? ) লুপে ধরা পড়েছেন? Awk while, Do while, For Loop, Break, Continue, Exit Examples