প্যাটার্ন সুনির্দিষ্ট ক্রিয়াগুলি ব্যবহার করে পাঠ্য বা স্ট্রিংগুলিকে ফিল্টার করতে আওক কীভাবে ব্যবহার করবেন


আওক কমান্ড সিরিজের তৃতীয় অংশে, আমরা নির্দিষ্ট ব্যবহারকারী বাছাই করতে পারে এমন নির্দিষ্ট প্যাটার্নের উপর ভিত্তি করে ফিল্টারিং পাঠ্য বা স্ট্রিংগুলিতে নজর রাখব।

কখনও কখনও, পাঠ্য ফিল্টার করার সময়, আপনি একটি ইনপুট ফাইল থেকে নির্দিষ্ট রেখাগুলি বা প্রদত্ত অবস্থার উপর ভিত্তি করে স্ট্রিংয়ের লাইনগুলি নির্দিষ্ট করতে চান বা ম্যাচ করতে পারে এমন একটি নির্দিষ্ট প্যাটার্ন ব্যবহার করতে চান। আওক দিয়ে এটি করা খুব সহজ, এটি আওকের অন্যতম দুর্দান্ত বৈশিষ্ট্য যা আপনাকে সহায়ক মনে হবে।

আসুন নীচের উদাহরণটিতে একবার দেখে নেওয়া যাক, আপনার কাছে যে খাদ্য আইটেমগুলি কিনতে চান সেগুলির জন্য আপনার কাছে শপিং তালিকা রয়েছে, এটি ফুড_প্রাইস.লিস্ট বলে। এটিতে খাদ্য আইটেম এবং তাদের দামগুলির নীচের তালিকা রয়েছে।

$ cat food_prices.list 
No	Item_Name		Quantity	Price
1	Mangoes			   10		$2.45
2	Apples			   20		$1.50
3	Bananas			   5		$0.90
4	Pineapples		   10		$3.46
5	Oranges			   10		$0.78
6	Tomatoes		   5		$0.55
7	Onions			   5            $0.45

এবং তারপরে, আপনি এমন খাদ্য আইটেমগুলিতে (*) সাইন ইঙ্গিত করতে চান যার দাম $2 এর চেয়ে বেশি, এটি নিম্নলিখিত কমান্ডটি চালিয়ে করা যেতে পারে:

$ awk '/ *$[2-9]\.[0-9][0-9] */ { print $1, $2, $3, $4, "*" ; } / *$[0-1]\.[0-9][0-9] */ { print ; }' food_prices.list

উপরের আউটপুট থেকে আপনি দেখতে পাবেন যে খাদ্য আইটেম, আম এবং আনারসযুক্ত রেখাগুলির শেষে একটি (*) চিহ্ন রয়েছে। আপনি যদি তাদের দামগুলি পরীক্ষা করেন তবে সেগুলি $2 এর উপরে।

এই উদাহরণে, আমরা দুটি নিদর্শন ব্যবহার করেছি:

  1. প্রথম: /*\$[2-9] \। [0-9] [0-9] */ এমন লাইনগুলি পেয়েছে যেগুলির খাবারের আইটেমের দাম $2 এবং
  2. দ্বিতীয়: /*\$رل0-১১\\.০0-৯ নভেম্বর -099] */ item 2 এর চেয়ে কম দামের খাবারের লাইনের সন্ধান করে <

এটি ঘটবে, ফাইলে চারটি ক্ষেত্র রয়েছে, যখন প্যাটার্ন একের সাথে খাবারের দামের দাম $2 এর চেয়ে বেশি হয় তবে এটি চারটি ক্ষেত্র এবং একটি (*) শেষে মুদ্রণ করে পতাকা হিসাবে লাইন।

দ্বিতীয় প্যাটার্নটি খাবারের দামের সাথে অন্য লাইনগুলি কেবল 2 ডলারের চেয়ে কম ছাপায় কারণ তারা ইনপুট ফাইল, ফুড_প্রাইস.লিস্টে প্রদর্শিত হবে।

এভাবে আউটপুট নিয়ে সমস্যা থাকলেও, আউটপুট নিয়ে সমস্যা থাকলেও, c 2 এর উপরে নির্ধারিত খাবার আইটেমগুলিকে ফিল্টার আউট করার জন্য আপনি প্যাটার্ন নির্দিষ্ট ক্রিয়াকলাপগুলি ব্যবহার করতে পারেন, (*) চিহ্ন রয়েছে এমন রেখাগুলি এর মতো বিন্যাস করা হয়নি আউটপুট যথেষ্ট পরিষ্কার না করে বাকী রেখাগুলি।

আমরা awk সিরিজের দ্বিতীয় খণ্ডে একই সমস্যাটি দেখেছি, তবে আমরা দুটি উপায়ে এটি সমাধান করতে পারি:

১. নীচের কমান্ডটি ব্যবহার করে প্রিন্টফ কমান্ডটি দীর্ঘ এবং বিরক্তিকর উপায়:

$ awk '/ *$[2-9]\.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s\n", $1, $2, $3, $4 "*" ; } / *$[0-1]\.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s\n", $1, $2, $3, $4; }' food_prices.list 

2. $0 ক্ষেত্র ব্যবহার করে। আওক পুরো ইনপুট লাইনটি সঞ্চয় করতে 0 ভ্যারিয়েবল ব্যবহার করে। এটি উপরের সমস্যা সমাধানের জন্য সহজ এবং নীচে এটি সহজ এবং দ্রুত:

$ awk '/ *$[2-9]\.[0-9][0-9] */ { print $0 "*" ; } / *$[0-1]\.[0-9][0-9] */ { print ; }' food_prices.list 

উপসংহার

এটি এখনই এটি এবং প্যাটার্ন নির্দিষ্ট অ্যাকশন ব্যবহার করে পাঠ্য ফিল্টারিংয়ের সহজ উপায় যা আউক কমান্ড ব্যবহার করে কোনও ফাইলের পাঠ্য বা স্ট্রিংয়ের পতাকাঙ্কিত করতে সহায়তা করতে পারে।

আশা করি আপনি এই নিবন্ধটি সহায়ক হিসাবে খুঁজে পেয়েছেন এবং সিরিজের পরবর্তী অংশটি পড়ার কথা মনে রাখবেন যা awk সরঞ্জাম ব্যবহার করে তুলনামূলক অপারেটরগুলি ব্যবহার করে ফোকাস করবে।