अवाक चर, संख्यात्मक अभिव्यक्तियों और असाइनमेंट ऑपरेटरों का उपयोग करना सीखें - भाग 8
Awk कमांड श्रृंखला रोमांचक हो रही है, मेरा मानना है कि पिछले सात भागों में, हम Awk के कुछ मूल सिद्धांतों से गुजरे हैं, जिन्हें आपको लिनक्स में कुछ मूल पाठ या स्ट्रिंग फ़िल्टरिंग को सक्षम करने के लिए मास्टर करने की आवश्यकता है।
इस भाग से शुरू करते हुए, हम अधिक जटिल पाठ या स्ट्रिंग फ़िल्टरिंग संचालन को संभालने के लिए Awk के अग्रिम क्षेत्रों में गोता लगाएँगे। इसलिए, हम वैरिएबल, न्यूमेरिक एक्सप्रेशंस और असाइनमेंट ऑपरेटर्स जैसे Awk फीचर्स को कवर करने जा रहे हैं।
ये अवधारणाएं उन लोगों से व्यापक रूप से भिन्न नहीं हैं जो संभवतः आपने कई प्रोग्रामिंग भाषाओं में सामना किया होगा, जैसे कि शेल, सी, पायथन प्लस और कई अन्य, इसलिए इस विषय के बारे में ज्यादा चिंता करने की आवश्यकता नहीं है, हम बस उपयोग करने के सामान्य विचारों को संशोधित कर रहे हैं इन सुविधाओं का उल्लेख किया।
यह शायद समझने में सबसे आसान Awk कमांड सेक्शन में से एक होगा, इसलिए वापस बैठें और चलें जाने दें।
1. अजीब चर
किसी भी प्रोग्रामिंग भाषा में, एक वैरिएबल एक स्थान धारक होता है जो एक वैल्यू स्टोर करता है, जब आप प्रोग्राम फ़ाइल में एक वैरिएबल बनाते हैं, जैसा कि फ़ाइल निष्पादित होती है, तो कुछ जगह मेमोरी में बनाई जाती है जो वैरिएबल के लिए आपके द्वारा निर्दिष्ट मूल्य को स्टोर करेगा।
आप अक् चर को उसी तरह परिभाषित कर सकते हैं जिस तरह से आप शेल चरों को परिभाषित करते हैं:
variable_name=value
उपरोक्त सिंटैक्स में:
-
variable_name
: वह नाम है जिसे आप एक चर देते हैं -
value
: चर में संग्रहीत मान
आइए नीचे कुछ उदाहरण देखें:
computer_name=”linux-console.net” port_no=”22” email=”[email ” server=”computer_name”
उपरोक्त सरल उदाहरणों पर एक नज़र डालें, पहली चर परिभाषा में, मान linux-console.net
चर computer_name
को सौंपा गया है।
इसके अलावा, मान <कोड> 22 कोड> चर port_no
को सौंपा गया है, अंतिम उदाहरण के रूप में एक चर के मूल्य को दूसरे चर में निर्दिष्ट करना भी संभव है जहां हमने मूल्य सौंपा है चर सर्वर के लिए computer_name
।
यदि आप याद कर सकते हैं, तो इस Awk श्रृंखला के भाग 2 से हम फील्ड एडिटिंग को कवर कर रहे थे, हमने इस बारे में बात की थी कि कैसे Awk खेतों में इनपुट लाइनों को विभाजित करता है और विभिन्न क्षेत्रों को पढ़ने के लिए मानक फ़ील्ड एक्सेस ऑपरेटर, $
का उपयोग करता है जो पार्स किया गया है। हम निम्न प्रकार के क्षेत्रों के मूल्यों को संग्रहीत करने के लिए चर का उपयोग कर सकते हैं।
first_name=$2 second_name=$3
उपरोक्त उदाहरणों में, first_name
का मान दूसरे फ़ील्ड पर सेट किया गया है और second_name
तीसरे फ़ील्ड पर सेट किया गया है।
चित्रण के रूप में, names.txt
नाम की एक फ़ाइल पर विचार करें, जिसमें एक एप्लिकेशन के उपयोगकर्ताओं की सूची होती है जो उनके पहले और अंतिम नामों के साथ-साथ लिंग का भी संकेत देते हैं। बिल्ली कमांड का उपयोग करके, हम फ़ाइल की सामग्री को निम्नानुसार देख सकते हैं:
$ cat names.txt
फिर, हम नीचे दिए गए Awk कमांड को चलाकर सूची में पहले उपयोगकर्ता के पहले और दूसरे नाम को स्टोर करने के लिए चर first_name
और second_name
का भी उपयोग कर सकते हैं:
$ awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt
एक अन्य मामले पर भी नज़र डालते हैं, जब आप अपने टर्मिनल पर uname -a
जारी करते हैं, तो यह आपके सिस्टम की सभी जानकारी प्रिंट करता है।
दूसरे फ़ील्ड में आपका hostname
है, इसलिए हम hostname को hostname
नामक वैरिएबल में स्टोर कर सकते हैं और इसे निम्नानुसार Awk का उपयोग करके प्रिंट कर सकते हैं:
$ uname -a $ uname -a | awk '{hostname=$2 ; print hostname ; }'
2. संख्यात्मक अभिव्यक्तियाँ
Awk में, न्यूमेरिक एक्सप्रेशंस को निम्नलिखित न्यूमेरिकल ऑपरेटर्स के द्वारा बनाया जाता है:
-
*
: गुणन ऑपरेटर -
+
: अतिरिक्त संचालक -
/
: डिवीजन ऑपरेटर -
-
: घटाव ऑपरेटर -
%
: मापांक ऑपरेटर -
^
: घातांक ऑपरेटर
संख्यात्मक भावों का सिंटैक्स है:
$ operand1 operator operand2
ऊपर दिए गए फॉर्म में, operand1
और operand2
संख्या या परिवर्तनशील नाम हो सकते हैं, और ऑपरेटर
उपरोक्त संचालकों में से कोई है।
सांख्यिक अभिव्यक्तियों का निर्माण करने के लिए नीचे कुछ उदाहरण दिए गए हैं:
counter=0 num1=5 num2=10 num3=num2-num1 counter=counter+1
Awk में संख्यात्मक अभिव्यक्तियों के उपयोग को समझने के लिए, हम नीचे दिए गए उदाहरण पर विचार करेंगे, फ़ाइल के साथ domain.txt
जिसमें Tecmint के स्वामित्व वाले सभी डोमेन हैं।
news.linux-console.net linux-console.net linuxsay.com windows.linux-console.net linux-console.net news.linux-console.net linux-console.net linuxsay.com linux-console.net news.linux-console.net linux-console.net linuxsay.com windows.linux-console.net linux-console.net
फ़ाइल की सामग्री देखने के लिए, नीचे दिए गए कमांड का उपयोग करें:
$ cat domains.txt
यदि हम फ़ाइल में दिखाई देने वाले डोमेन linux-console.net
की संख्या की गणना करना चाहते हैं, तो हम निम्न करने के लिए एक सरल स्क्रिप्ट लिख सकते हैं:
#!/bin/bash for file in [email ; do if [ -f $file ] ; then #print out filename echo "File is: $file" #print a number incrementally for every line containing linux-console.net awk '/^linux-console.net/ { counter=counter+1 ; printf "%s\n", counter ; }' $file else #print error info incase input is not a file echo "$file is not a file, please specify a file." >&2 && exit 1 fi done #terminate script with exit code 0 in case of successful execution exit 0
स्क्रिप्ट बनाने के बाद, इसे सहेजें और इसे निष्पादन योग्य बनाएं, जब हम इसे फ़ाइल के साथ चलाते हैं, तो domain.txt
इनपुट के रूप में, हमें निम्न आउटपुट मिलते हैं:
$ ./script.sh ~/domains.txt
स्क्रिप्ट के आउटपुट से, फ़ाइल में 6 पंक्तियाँ हैं domain.txt
जिसमें linux-console.net
है, यह पुष्टि करने के लिए कि आप उन्हें मैन्युअल रूप से गिन सकते हैं।
3. असाइनमेंट ऑपरेटर
अंतिम अवीक फ़ीचर जिसे हम कवर करेंगे, असाइनमेंट ऑपरेटर हैं, अवीक में कई असाइनमेंट ऑपरेटर हैं और इनमें निम्नलिखित शामिल हैं:
-
* =
: गुणन असाइनमेंट ऑपरेटर -
+ =
: इसके अलावा असाइनमेंट ऑपरेटर -
/=
: विभाजन असाइनमेंट ऑपरेटर -
- =
: घटाव असाइनमेंट ऑपरेटर -
% =
: मापांक असाइनमेंट ऑपरेटर -
^=
: घातांक असाइनमेंट ऑपरेटर
Awk में एक असाइनमेंट ऑपरेशन का सबसे सरल सिंटैक्स निम्नानुसार है:
$ variable_name=variable_name operator operand
उदाहरण:
counter=0 counter=counter+1 num=20 num=num-1
आप ऊपर दिए गए असाइनमेंट ऑपरेटर्स का उपयोग Awk में असाइनमेंट ऑपरेशंस को छोटा करने के लिए कर सकते हैं, पिछले उदाहरणों पर विचार करें, हम असाइनमेंट को निम्न रूप में कर सकते हैं:
variable_name operator=operand
counter=0 counter+=1 num=20 num-=1
इसलिए, हम शेल स्क्रिप्ट में Awk कमांड को बदल सकते हैं, जिसे हमने ऊपर लिखा है + =
असाइनमेंट ऑपरेटर का उपयोग करके:
#!/bin/bash for file in [email ; do if [ -f $file ] ; then #print out filename echo "File is: $file" #print a number incrementally for every line containing linux-console.net awk '/^linux-console.net/ { counter+=1 ; printf "%s\n", counter ; }' $file else #print error info incase input is not a file echo "$file is not a file, please specify a file." >&2 && exit 1 fi done #terminate script with exit code 0 in case of successful execution exit 0
Awk सीरीज़ के इस सेगमेंट में, हमने कुछ शक्तिशाली Awk फीचर्स को कवर किया, जो कि वैरिएबल हैं, न्यूमेरिक एक्सप्रेशंस का निर्माण कर रहे हैं और असाइनमेंट ऑपरेटर्स का उपयोग कर रहे हैं, साथ ही कुछ इलस्ट्रेशन भी बताए हैं कि हम वास्तव में उनका उपयोग कैसे कर सकते हैं।
ये अवधारणाएं अन्य प्रोग्रामिंग भाषाओं में किसी से अलग नहीं हैं, लेकिन Awk प्रोग्रामिंग के तहत कुछ महत्वपूर्ण अंतर हो सकते हैं।
भाग 9 में, हम अधिक अवेक विशेषताओं को देखेंगे जो विशेष पैटर्न हैं: BEGIN
और END
। तब तक, Tecmint से जुड़े रहें।