কিভাবে AWK কমান্ড এবং স্ক্রিপ্ট লিখুন

কমান্ড, বাক্য গঠন, এবং উদাহরণ

Awk কমান্ড পাঠ্য ফাইলগুলি প্রক্রিয়াকরণ বা বিশ্লেষণের জন্য একটি শক্তিশালী পদ্ধতি - বিশেষ করে লাইনগুলি (সারি) এবং কলাম দ্বারা সংগঠিত ডেটা ফাইলগুলি।

সহজ awk কমান্ডগুলি কমান্ড লাইন থেকে চালানো যেতে পারে। আরো জটিল কর্মগুলি একটি ফাইলে awk প্রোগ্রাম (তথাকথিত awk স্ক্রিপ্ট) হিসাবে লেখা উচিত।

একটি awk কমান্ডের মৌলিক বিন্যাসটি এইরকম দেখায়:

awk 'প্যাটার্ন {action}' ইনপুট-ফাইল> আউটপুট-ফাইল

এর অর্থ: ইনপুট ফাইলের প্রতিটি লাইনটি গ্রহণ করুন; যদি রেখাটি প্যাটার্ন ধারণ করে তবে কর্মটি লাইনের মধ্যে প্রয়োগ করে এবং ফলাফলের ফলাফলটি আউটপুট-ফাইলে লিখুন যদি প্যাটার্ন বাদ দেওয়া হয়, তাহলে কর্মটি সমস্ত লাইনে প্রয়োগ করা হয়। উদাহরণ স্বরূপ:

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

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

1, জাস্টিন টিমবার্লাক, শিরোনাম 545, মূল্য $ 7.30 ২, টেলর সুইফট, শিরোনাম 7২3, মূল্য 7 ডলার, মূল্য $ 7.90 3, মিক জগর, শিরোনাম 610, মূল্য $ 7.90 4, লেডি গাগা, শিরোনাম 118, মূল্য $ 7.30 5, জনি ক্যাশ, শিরোনাম 48২, মূল্য 6.50 ডলার 6, এলভিস প্রেস্টলি, শিরোনাম 335, মূল্য $ 7.30 7, জন লেনন, শিরোনাম 271, মূল্য $ 7.90 8, মাইকেল জ্যাকসন, শিরোনাম 373, মূল্য $ 5.50

তারপর কমান্ডটি আউটপুট ফাইল "output1.txt" এ নিম্নলিখিত লাইন লিখবে:

545, 7২3, 610, 118, 48২, 335, ২71, 373,

যদি কলাম বিভাজক স্পেস বা ট্যাব ছাড়া অন্য কিছু হয়, যেমন কমা যেমন, আপনি নিম্নোক্ত awk স্টেটমেন্টে নির্দিষ্ট করতে পারেন:

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

কলামটি একটি কমা দ্বারা পৃথক করা হলে এটি প্রতিটি লাইনের কলাম 3 থেকে উপাদান নির্বাচন করবে। অতএব, এই ক্ষেত্রে আউটপুট, হবে:

শিরোনাম 545 শিরোনাম 7২3 শিরোনাম 610 শিরোনাম 118 শিরোনাম 482 শিরোনাম 335 শিরোনাম 271 শিরোনাম 373

কোঁকড়া বন্ধনী ('{', '}') এর মধ্যে বিবৃতিগুলির তালিকাটিকে একটি ব্লক বলা হয়। যদি আপনি একটি ব্লকের সামনে একটি শর্তসাপেক্ষ অভিব্যক্তি রাখেন, তাহলে ব্লকের ভিতরে বিবৃতিটি কেবলমাত্র কার্যকর হবে যদি শর্ত সত্য হয়।

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

এই ক্ষেত্রে, শর্ত $ 7 == "\ $ 7.30", যার অর্থ হল কলাম 7 এ উপাদানটি $ 7.30 এর সমান। ডলার চিহ্নের সামনে ব্যাকস্ল্যাশ ব্যবহার করে সিস্টেমকে $ 7 রূপান্তরকে একটি পরিবর্তনশীল হিসাবে ব্যাবহার করতে এবং পরিবর্তে ডলারের চিহ্নটি আক্ষরিকভাবে গ্রহণ করে।

সুতরাং এই awk স্টেটমেন্টটি প্রতিটি লাইনের 3 য় কলামে উপাদানটি প্রিন্ট করে, যার মধ্যে কলাম 7 এ "$ 7.30" আছে।

শর্ত হিসাবে আপনি রেগুলার এক্সপ্রেশন ব্যবহার করতে পারেন। উদাহরণ স্বরূপ:

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

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

টিমবার্লাক, গাগা, প্রিস্লি,

যদি টেবিলের উপাদান সংখ্যাগুলি awk এই উদাহরণ হিসাবে তাদের গণনা চালাতে পারে:

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

বর্তমান সারি ($ 1, $ 2, ইত্যাদি) এর উপাদানের অ্যাক্সেসের ভেরিয়েবল ছাড়াও ভেরিয়েবল $ 0 যা সম্পূর্ণ সারি (লাইন), এবং পরিবর্তনশীল NF যা ক্ষেত্রের সংখ্যা ধরে রাখে।

আপনি এই উদাহরণ হিসাবে নতুন ভেরিয়েবল সংজ্ঞায়িত করতে পারেন:

awk '{sum = 0; জন্য (কল = 1; কল <= এনএফ; কোল ++) সমষ্টি + = $ কল; মুদ্রণ সমষ্টি; } '

এই প্রতিটি সারি সব উপাদানের সমষ্টি গণনা এবং প্রিন্ট।

অক বিবৃতিগুলি প্রায়ই sed কমান্ডগুলি দিয়ে মিলিত হয়।