কীভাবে লিনাক্সে awk কমান্ড ব্যবহার করবেন

লিনাক্সে,অজস্র একটি কমান্ড-লাইন পাঠ্য ম্যানিপুলেশন ডায়নামো, পাশাপাশি একটি শক্তিশালী স্ক্রিপ্টিং ভাষা। এখানে এর দুর্দান্ত কিছু বৈশিষ্ট্যের পরিচয় দেওয়া হল।

কী ভয়ঙ্কর পেয়েছে এর নাম

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

এটি একটি সম্পূর্ণ স্ক্রিপ্টিং ভাষা, পাশাপাশি কমান্ড লাইনের জন্য একটি সম্পূর্ণ পাঠ্য ম্যানিপুলেশন টুলকিট। যদি এই নিবন্ধটি আপনার ক্ষুধা নিরসন করে তবে আপনি তার সম্পর্কে প্রতিটি বিশদ পরীক্ষা করে দেখতে পারেনঅজস্র এবং এর কার্যকারিতা।

বিধি, নিদর্শন এবং ক্রিয়া

অজস্র নিদর্শন এবং ক্রিয়া সমন্বিত বিধি থাকা প্রোগ্রামগুলিতে কাজ করে। প্যাটার্নটির সাথে মেলে এমন ক্রিয়াকলাপটি কার্যকর করা হয়েছে। প্যাটার্নগুলি কোঁকড়া ধনুর্বন্ধনী বদ্ধ হয় ({})। একসাথে, একটি প্যাটার্ন এবং একটি ক্রিয়া একটি বিধি তৈরি করে। সমগ্র অজস্র প্রোগ্রামটি একক উদ্ধৃতিতে আবদ্ধ (').

আসুন এর সহজতম ধরণটি একবার দেখুন অজস্র কার্যক্রম. এটির কোনও প্যাটার্ন নেই, সুতরাং এটি এতে দেওয়া প্রতিটি পাঠ্যের সাথেই মেলে। এর অর্থ প্রতিটি লাইনে ক্রিয়াটি কার্যকর করা হয়। আমরা এটি আউটপুট থেকে ব্যবহার করব WHO আদেশ

এখানে থেকে স্ট্যান্ডার্ড আউটপুট WHO:

WHO

সম্ভবত আমাদের সেই সমস্ত তথ্যের প্রয়োজন নেই, তবে কেবল অ্যাকাউন্টগুলিতে নামগুলি দেখতে চান। আমরা আউটপুট পাইপ করতে পারেন WHO মধ্যে অজস্র, এবং তারপর বলুন অজস্র শুধুমাত্র প্রথম ক্ষেত্র মুদ্রণ করতে।

গতানুগতিক, অজস্র একটি ক্ষেত্রকে শ্বেতক্ষেত্র, রেখার সূচনা বা একটি লাইনের শেষে ঘেরা অক্ষরের একটি স্ট্রিং হিসাবে বিবেচনা করে। ক্ষেত্রগুলি ডলারের চিহ্ন দ্বারা চিহ্নিত করা হয় ($) এবং একটি সংখ্যা। সুতরাং,$1 প্রথম ক্ষেত্রের প্রতিনিধিত্ব করে, যা আমরা ব্যবহার করব ছাপা প্রথম ক্ষেত্রটি মুদ্রণের জন্য ক্রিয়া।

আমরা নিম্নলিখিত টাইপ:

কে | awk '{মুদ্রণ $ 1}'

অজস্র প্রথম ক্ষেত্রটি মুদ্রণ করে এবং বাকী রেখাটি বাতিল করে দেয়।

আমরা আমাদের পছন্দ মতো অনেকগুলি ক্ষেত্র মুদ্রণ করতে পারি। যদি আমরা বিভাজক হিসাবে কমা যোগ করি,অজস্র প্রতিটি ক্ষেত্রের মধ্যে একটি স্থান মুদ্রণ করে।

ব্যক্তি লগ ইন করার সময় (ফিল্ড ফোর) প্রিন্ট করতে আমরা নিম্নলিখিতটি টাইপ করি:

কে | awk '{মুদ্রণ $ 1, $ 4}'

বিশেষ ক্ষেত্র শনাক্তকারীদের কয়েক আছে। এগুলি টেক্সটের লাইনে সম্পূর্ণ পাঠ্য এবং শেষ ক্ষেত্রকে উপস্থাপন করে:

  • $0: পাঠ্যের পুরো লাইনটি উপস্থাপন করে।
  • $1: প্রথম ক্ষেত্রের প্রতিনিধিত্ব করে।
  • $2: দ্বিতীয় ক্ষেত্রের প্রতিনিধিত্ব করে।
  • $7: সপ্তম ক্ষেত্রের প্রতিনিধিত্ব করে।
  • $45: 45 তম ক্ষেত্রের প্রতিনিধিত্ব করে।
  • । এনএফ: "ক্ষেত্রের সংখ্যা", এবং শেষ ক্ষেত্রের প্রতিনিধিত্ব করে।

একটি ছোট পাঠ্য ফাইল আনার জন্য আমরা নিম্নলিখিতটি টাইপ করব যা ডেনিস রিচির সাথে সংযুক্ত একটি সংক্ষিপ্ত উদ্ধৃতি রয়েছে:

বিড়াল dennis_ritchie.txt

আমরা চাইঅজস্র উদ্ধৃতি প্রথম, দ্বিতীয় এবং শেষ ক্ষেত্র মুদ্রণ। দ্রষ্টব্য যে এটি টার্মিনাল উইন্ডোতে প্রায় আবৃত থাকলেও এটি কেবল পাঠ্যের একক লাইন।

আমরা নিম্নলিখিত কমান্ডটি টাইপ করি:

awk '{মুদ্রণ $ 1, $ 2, $ NF}' dennis_ritchie.txt

আমরা যে "সরলতা" জানি না। পাঠ্য লাইনের 18 তম ক্ষেত্র, এবং আমরা যত্ন করি না। আমরা যা জানি তা হ'ল এটিই সর্বশেষ ক্ষেত্র এবং আমরা ব্যবহার করতে পারি । এনএফ এর মান পেতে পিরিয়ডটি কেবল ক্ষেত্রের শরীরে অন্য একটি চরিত্র হিসাবে বিবেচিত হয়।

আউটপুট ফিল্ড পৃথককারী যুক্ত করা হচ্ছে

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

তারিখ
তারিখ | awk '{মুদ্রণ $ 2, $ 3, $ 6}'

আমরা এটি ব্যবহার করব অফস (আউটপুট ফিল্ড বিভাজক) মাস, দিন এবং বছরের মধ্যে একটি বিভাজক স্থাপন করতে পরিবর্তনশীল। নোট করুন যে নীচে আমরা একক উদ্ধৃতিতে কমান্ডটি আবদ্ধ করেছি ('), কোঁকড়া ধনুর্বন্ধনী না ({}):

তারিখ | awk 'OFS = "/" {মুদ্রণ $ 2, $ 3, $ 6}'
তারিখ | awk 'OFS = "-" {2, $ 3, $ 6 {মুদ্রণ করুন "

শুরু এবং শেষ বিধি

শুরু করুন কোনও পাঠ্য প্রক্রিয়াজাতকরণ শুরুর আগে একবার নিয়ম কার্যকর করা হয়। আসলে, এটি আগে কার্যকর করা হয়েছিল অজস্র এমনকি যে কোনও লেখা পড়ে reads একটি শেষ সমস্ত প্রক্রিয়া শেষ হওয়ার পরে নিয়ম কার্যকর করা হয়। আপনি একাধিক থাকতে পারে শুরু করুন এবংশেষ নিয়ম করে, এবং তারা ক্রমে কার্যকর করা হবে।

আমাদের একটি উদাহরণ জন্য শুরু করুন নিয়ম করুন, আমরা সম্পূর্ণ উক্তিটি মুদ্রণ করব dennis_ritchie.txt ফাইলটি আমরা এর উপরে একটি শিরোনাম সহ পূর্বে ব্যবহার করেছি।

এটি করতে, আমরা এই আদেশটি টাইপ করি:

awk 'BEGIN {মুদ্রণ "ডেনিস রিচি"} {মুদ্রণ} 0}' dennes_ritchie.txt

নোট করুন শুরু করুন নিয়মের নিজস্ব ক্রিয়াকলিত বন্ধনীগুলির সেটের মধ্যে ক্রিয়াগুলির নিজস্ব সেট রয়েছে ({}).

আউটপুটটি পাইপ করার জন্য আমরা পূর্বে যে কমান্ডটি ব্যবহার করেছি তা দিয়ে আমরা একই কৌশলটি ব্যবহার করতে পারি WHO মধ্যে অজস্র। এটি করতে, আমরা নিম্নলিখিত টাইপ করুন:

কে | awk 'BEGIN {"অ্যাক্টিভ সেশনস" মুদ্রণ করুন {{মুদ্রণ করুন $ 1, $ 4}'

ইনপুট ফিল্ড বিভাজক

তুমি যদি চাও অজস্র ক্ষেত্রগুলি পৃথক করার জন্য হোয়াইটস্পেস ব্যবহার করে না এমন পাঠ্যের সাথে কাজ করতে আপনাকে পাঠ্যটি ফিল্ড বিভাজক হিসাবে কোন অক্ষরটি ব্যবহার করে তা তা আপনাকে বলতে হবে। উদাহরণস্বরূপ, / ইত্যাদি / পাসডাব্লু ফাইল একটি কোলন ব্যবহার করে (:) ক্ষেত্র পৃথক করতে।

আমরা সেই ফাইলটি এবং এটি ব্যবহার করব -এফ (বিভাজক স্ট্রিং) বলতে বিকল্প অজস্র কোলন ব্যবহার করতে (:) বিভাজক হিসাবে। আমরা জানার জন্য নিম্নলিখিত টাইপ করুন অজস্র ব্যবহারকারীর অ্যাকাউন্টের নাম এবং বাড়ির ফোল্ডারটি মুদ্রণ করতে:

awk -F: '{মুদ্রণ $ 1, $ 6}' / ইত্যাদি / পাসডাব্লুডি

আউটপুটটিতে ব্যবহারকারীর অ্যাকাউন্টের নাম (বা অ্যাপ্লিকেশন বা ডেমন নাম) এবং হোম ফোল্ডার (বা অ্যাপ্লিকেশনটির অবস্থান) থাকে।

প্যাটার্নগুলি যুক্ত করা হচ্ছে

আমরা যদি আগ্রহী সমস্তই নিয়মিত ব্যবহারকারীর অ্যাকাউন্ট হয় তবে অন্য সমস্ত এন্ট্রি ফিল্টার করার জন্য আমরা আমাদের মুদ্রণ ক্রিয়া সহ একটি প্যাটার্ন অন্তর্ভুক্ত করতে পারি। যেহেতু ব্যবহারকারীর আইডি নম্বরগুলি 1000 এর সমান বা তার চেয়ে বেশি, তাই আমরা আমাদের ফিল্টারটি সেই তথ্যের উপর ভিত্তি করে করতে পারি।

তৃতীয় ক্ষেত্র কেবল তখনই আমাদের মুদ্রণ ক্রিয়াটি কার্যকর করতে নিম্নলিখিতটি টাইপ করি ($3) এর মান ১,০০০ বা তারও বেশি হতে পারে:

awk -F: '$ 3> = 1000 {মুদ্রণ $ 1, $ 6}' / ইত্যাদি / পাসডাব্লু

প্যাটার্নটি এর সাথে যুক্ত হওয়ার সাথে সাথে ক্রিয়াটির আগেই কাজ করা উচিত।

আমরা ব্যবহার করতে পারেন শুরু করুন আমাদের সামান্য রিপোর্টের জন্য একটি শিরোনাম সরবরাহ করার নিয়ম। আমরা নিম্নলিখিতটি টাইপ করে (। n) শিরোনাম স্ট্রিংয়ে একটি নতুন লাইন অক্ষর inোকানোর জন্য স্বরলিপি:

awk -F: 'BEGIN {মুদ্রণ "ব্যবহারকারী অ্যাকাউন্টগুলি \ n -------------"} $ 3> = 1000 {মুদ্রণ $ 1, $ 6}' / ইত্যাদি / পাসডাব্লুড

প্যাটার্নগুলি পূর্ণ-নিয়মিত এক্সপ্রেশন এবং সেগুলির অন্যতম গৌরব অজস্র.

ধরা যাক আমরা মাউন্ট করা ফাইল সিস্টেমগুলির সর্বজনীন অনন্য সনাক্তকারী (ইউআইডি) দেখতে চাই। আমরা যদি এর মাধ্যমে অনুসন্ধান করি / ইত্যাদি / fstab "ইউআইডি" স্ট্রিংয়ের ঘটনাগুলির জন্য ফাইলটি আমাদের জন্য সেই তথ্যটি ফিরিয়ে দেওয়া উচিত।

আমরা আমাদের কমান্ডে অনুসন্ধানের প্যাটার্নটি "/ ইউইউডি /" ব্যবহার করি:

awk '/ UID / {মুদ্রণ $ 0}' / ইত্যাদি / fstab

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

পাওয়া প্রথম লাইনটি একটি মন্তব্য রেখা ছিল এবং যদিও "ইউইউডি" স্ট্রিং এর মাঝখানে রয়েছে, অজস্র এখনও এটি খুঁজে। আমরা নিয়মিত অভিব্যক্তিটি টুইঙ্ক করে বলতে পারি অজস্র "ইউইউডি" দিয়ে শুরু হওয়া কেবল রেখাগুলি প্রক্রিয়া করতে। এটি করতে, আমরা নিম্নলিখিতটি টাইপ করি যার মধ্যে লাইন টোকেনের শুরু অন্তর্ভুক্ত রয়েছে (^):

awk '/ ^ UID / {মুদ্রণ $ 0}' / ইত্যাদি / fstab

এটা তুলনামূলক ভাল! এখন, আমরা কেবলমাত্র আসল মাউন্ট নির্দেশাবলী দেখতে পাই। আরও আউটপুট আরও পরিমার্জন করতে, আমরা নিম্নলিখিত টাইপ করুন এবং প্রদর্শন প্রথম ক্ষেত্রের মধ্যে সীমাবদ্ধ:

awk '/ ^ UID / {মুদ্রণ $ 1}' / ইত্যাদি / fstab

যদি আমাদের এই মেশিনে একাধিক ফাইল সিস্টেম মাউন্ট করা থাকে তবে আমরা তাদের ইউআইডিগুলির একটি ঝরঝরে টেবিল পেয়ে যাব।

অন্তর্নির্মিত কার্যাদি

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

কোনও ফাংশন কল করার সাধারণ কৌশলটি প্রদর্শনের জন্য, আমরা কয়েকটি সংখ্যার দিকে নজর দেব। উদাহরণস্বরূপ, নিম্নলিখিত 625 এর বর্গমূল মুদ্রণ করে:

awk 'BEGIN {প্রিন্ট স্কয়ার্ট (625)}'

এই কমান্ডটি 0 (শূন্য) এবং -1 এর আর্কটেন্টকে মুদ্রণ করে (যা গাণিতিক ধ্রুবক হিসাবে দেখা যায়, পাই):

awk 'BEGIN {মুদ্রণ atan2 (0, -1)}'

নিম্নলিখিত কমান্ডে, আমরা ফলাফলের পরিবর্তন atan2 () এটি মুদ্রণের আগে ফাংশন:

awk 'BEGIN {মুদ্রণ atan2 (0, -1) * 100}'

ফাংশনগুলি প্যারামিটার হিসাবে এক্সপ্রেশন গ্রহণ করতে পারে। উদাহরণস্বরূপ, 25 এর বর্গমূল জিজ্ঞাসা করার জন্য এখানে একটি বিভ্রান্তিকর উপায়:

awk 'BEGIN {প্রিন্ট স্কয়ার্ট ((2 + 3) * 5)}'

awk স্ক্রিপ্ট

যদি আপনার কমান্ড লাইন জটিল হয়ে যায়, বা আপনি যদি একটি রুটিন বিকাশ করেন তবে আপনি জানেন যে আপনি আবার ব্যবহার করতে চান, আপনি নিজের স্থানান্তর করতে পারেন অজস্র একটি স্ক্রিপ্ট কমান্ড।

আমাদের উদাহরণ স্ক্রিপ্টে, আমরা নীচের সমস্তগুলি করতে যাচ্ছি:

  • স্ক্রিপ্টটি চালানোর জন্য ব্যবহারযোগ্য শেলটি বলুন।
  • প্রস্তুত করা অজস্র ব্যবহার করতে এফ এস কলোন দ্বারা পৃথক পৃথক ক্ষেত্রগুলির সাথে ইনপুট পাঠ্য পড়তে ফিল্ড বিভাজক ভেরিয়েবল (:).
  • ব্যবহার অফস আউটপুট ফিল্ড বিভাজক বলতে অজস্র কলোন ব্যবহার করতে (:) আউটপুট ক্ষেত্র পৃথক করতে।
  • 0 (শূন্য) এ একটি কাউন্টার সেট করুন।
  • পাঠ্যের প্রতিটি লাইনের দ্বিতীয় ক্ষেত্রটি ফাঁকা মানতে সেট করুন (এটি সর্বদা একটি "এক্স" থাকে, তাই আমাদের এটি দেখার দরকার নেই)।
  • পরিবর্তিত দ্বিতীয় ক্ষেত্রের সাথে লাইনটি মুদ্রণ করুন।
  • কাউন্টার বাড়িয়ে দিন।
  • কাউন্টারটির মান মুদ্রণ করুন।

আমাদের স্ক্রিপ্ট নীচে প্রদর্শিত হয়।

দ্য শুরু করুন বিধি প্রস্তুতিমূলক পদক্ষেপগুলি বহন করে, যখনশেষ নিয়ম পাল্টা মান প্রদর্শন করে। মাঝের নিয়ম (যার কোনও নাম বা প্যাটার্ন নেই তাই এটি প্রতিটি লাইনের সাথে মেলে) দ্বিতীয় ক্ষেত্রটি পরিবর্তন করে, লাইনটি মুদ্রণ করে এবং কাউন্টারকে বাড়িয়ে দেয় ments

স্ক্রিপ্টের প্রথম লাইনটি শেলটি জানায় যা ব্যবহারের জন্য নির্বাহযোগ্য (অজস্র, আমাদের উদাহরণে) স্ক্রিপ্টটি চালাতে। এটি পাস করে -ফ (ফাইলের নাম) বিকল্পটি অজস্র, যা এটি পাঠ্যটিকে প্রক্রিয়া করতে চলেছে তা একটি ফাইল থেকে আসবে। ফাইল চালানোর সময় আমরা স্ক্রিপ্টটিতে ফাইলের নামটি পাঠিয়ে দেব।

আমরা নীচের স্ক্রিপ্টটিকে পাঠ্য হিসাবে অন্তর্ভুক্ত করেছি যাতে আপনি কাটা এবং পেস্ট করতে পারেন:

#! / usr / bin / awk -f BEGIN {# ইনপুট এবং আউটপুট ক্ষেত্র বিভাজকগুলি এফএস = ":" অফস = "সেট করুন:" # শূন্য অ্যাকাউন্টগুলির কাউন্টার অ্যাকাউন্টগুলি = 0} {# ক্ষেত্র 2 সেট করুন nothing 2 = "" # পুরো লাইন প্রিন্ট করুন print 0 # অন্য অ্যাকাউন্ট অ্যাকাউন্ট গণনা ++} END {# ফলাফল মুদ্রণ অ্যাকাউন্টগুলি "অ্যাকাউন্টগুলি মুদ্রণ করুন \ \ n"}

এটি একটি ফাইল হিসাবে সংরক্ষণ করুন omit.awk। স্ক্রিপ্টটি কার্যকর করতে, আমরা নিম্নলিখিতটি ব্যবহার করে টাইপ করি chmod:

chmod + x omit.awk

এখন, আমরা এটি চালাব এবং পাস করব / ইত্যাদি / পাসডাব্লু স্ক্রিপ্ট ফাইল। এই ফাইলঅজস্র স্ক্রিপ্টের মধ্যে বিধিগুলি ব্যবহার করে আমাদের জন্য প্রক্রিয়া করবে:

./omit.awk / ইত্যাদি / পাসডাব্লু

ফাইলটি প্রক্রিয়াজাত করা হয় এবং প্রতিটি লাইন প্রদর্শিত হয়, নীচে দেখানো হয়েছে।

দ্বিতীয় ক্ষেত্রের "এক্স" এন্ট্রিগুলি সরানো হয়েছে, তবে ক্ষেত্রের বিভাজকগুলি এখনও উপস্থিত রয়েছে তা নোট করুন। লাইন গণনা করা হয় এবং মোট আউটপুট নীচে দেওয়া হয়।

awk অ্যাজওয়ার্ডের জন্য দাঁড়ায় না

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

সেই শক্তি নিয়মগুলির সাধারণ ধারণার দ্বারা নিদর্শনগুলি ধারণ করে, যা প্রক্রিয়াকরণের জন্য পাঠ্য নির্বাচন করে এবং প্রক্রিয়াকরণটিকে সংজ্ঞায়িত করে এমন ক্রিয়াগুলি।


$config[zx-auto] not found$config[zx-overlay] not found