5.0 AWK के अंतर्निहित चरों में महारत हासिल करना
5.1. अंतर्निर्मित चरों की भूमिका
AWK की एक महत्वपूर्ण विशेषता इसके अंतर्निहित चर हैं, जो इनपुट डेटा, निष्पादन वातावरण और प्रोग्राम की स्थिति के बारे में जानकारी तक स्वचालित पहुँच प्रदान करते हैं। शक्तिशाली, संक्षिप्त और सहज AWK स्क्रिप्ट लिखने के लिए इनका उपयोग करना अत्यंत आवश्यक है।
5.2. मानक AWK चर
- एआरजीसी और एआरजीवी ARGC में कमांड-लाइन आर्गुमेंट्स की संख्या होती है, जबकि ARGV एक ऐरे है जिसमें आर्गुमेंट्स स्वयं मौजूद होते हैं। ध्यान दें कि ARGV[0] में कमांड का नाम, awk, होता है।
- एनएफ (फ़ील्डों की संख्या) इस वेरिएबल में वर्तमान रिकॉर्ड में मौजूद फ़ील्ड्स की कुल संख्या होती है। प्रत्येक रिकॉर्ड पढ़ने पर इसकी गणना दोबारा की जाती है।
- एनआर (रिकॉर्डों की संख्या) यह वेरिएबल एक ग्लोबल काउंटर के रूप में कार्य करता है, जो स्क्रिप्ट शुरू होने के बाद से संसाधित किए गए रिकॉर्ड की संचयी संख्या को संग्रहीत करता है।
- एफएनआर (रिकॉर्ड की फ़ाइल संख्या) NR की तरह ही, FNR भी रिकॉर्ड नंबर को स्टोर करता है, लेकिन प्रोसेस की गई प्रत्येक नई इनपुट फ़ाइल के लिए इसे 1 पर रीसेट कर दिया जाता है। यह इसे मल्टी-फ़ाइल ऑपरेशन्स के लिए बेहद उपयोगी बनाता है। उदाहरण के लिए, दो फ़ाइलों पर विचार करें: data1.txt जिसमें A\nB है और data2.txt जिसमें C\nD है।
- ध्यान दें कि data2.txt के लिए FNR 1 पर रीसेट हो जाता है, जबकि NR लगातार बढ़ता रहता है।
- एफएस (फील्ड सेपरेटर) इनपुट रिकॉर्ड में फ़ील्ड को अलग करने के लिए उपयोग किए जाने वाले वर्ण या रेगुलर एक्सप्रेशन को परिभाषित करता है। डिफ़ॉल्ट रूप से यह व्हाइटस्पेस (एक या अधिक स्पेस या टैब) होता है।
- आरएस (रिकॉर्ड सेपरेटर) इनपुट में रिकॉर्ड को अलग करने के लिए उपयोग किए जाने वाले वर्ण को परिभाषित करता है। डिफ़ॉल्ट मान एक नई पंक्ति वर्ण (\n) है।
- OFS (आउटपुट फील्ड सेपरेटर) यह मान प्रिंट स्टेटमेंट को एकाधिक आर्गुमेंट के साथ उपयोग करते समय आउटपुट में फ़ील्ड के बीच रखे जाने वाले विभाजक को परिभाषित करता है। डिफ़ॉल्ट मान एक एकल रिक्त स्थान है।
- ओआरएस (आउटपुट रिकॉर्ड सेपरेटर) आउटपुट में प्रत्येक रिकॉर्ड के अंत में रखे जाने वाले विभाजक को परिभाषित करता है। डिफ़ॉल्ट मान एक नई पंक्ति वर्ण (\n) है।
- फ़ाइल का नाम इस वेरिएबल में वर्तमान में संसाधित की जा रही इनपुट फ़ाइल का नाम होता है।
- **$0 और n** जैसा कि पहले उल्लेख किया गया है, `0` पूरे वर्तमान रिकॉर्ड को दर्शाता है, जबकि n` (जैसे, `1, $2`) उस रिकॉर्ड में nवें फ़ील्ड को दर्शाता है।
- आरस्टार्ट और आरएलईएनजीटी इसका उपयोग match() फ़ंक्शन के साथ किया जाता है। सफल मिलान के बाद, RSTART मिलान किए गए सबस्ट्रिंग की प्रारंभिक स्थिति (सूचकांक) को संग्रहीत करता है, और RLENGTH उसकी लंबाई को संग्रहीत करता है।
- CONVFMT & OFMT ये वैरिएबल संख्याओं को स्ट्रिंग में परिवर्तित करने के प्रारूप (CONVFMT) और प्रिंट कमांड द्वारा मुद्रित संख्याओं के आउटपुट प्रारूप (OFMT) को नियंत्रित करते हैं। दोनों का डिफ़ॉल्ट मान %.6g है।
- उप यह वेरिएबल बहु-आयामी सरणियों को अनुकरण करने के लिए उपयोग किए जाने वाले सबस्क्रिप्ट विभाजक को निर्दिष्ट करता है। डिफ़ॉल्ट मान गैर-मुद्रण योग्य वर्ण \034 है।
- घेरना एक एसोसिएटिव ऐरे जो शेल के एनवायरनमेंट वेरिएबल्स तक पहुंच प्रदान करता है।
5.3. GNU AWK (GAWK) विशिष्ट चर
GAWK अपने स्वयं के अंतर्निर्मित चरों के समूह के माध्यम से POSIX मानक में कई विस्तार प्रदान करता है।
- अरगिंद: ARGV ऐरे में वह इंडेक्स जो वर्तमान में प्रोसेस की जा रही फ़ाइल को इंगित करता है।
- मामले की अनदेखी करें: यदि इसे गैर-शून्य मान पर सेट किया जाता है, तो यह सभी नियमित अभिव्यक्ति संचालन के लिए केस-असंवेदनशील पैटर्न मिलान को सक्षम बनाता है।
- इरनोजब कोई रीडायरेक्शन या क्लोज() ऑपरेशन विफल हो जाता है, तो इस वेरिएबल में सिस्टम-निर्भर त्रुटि संदेश स्ट्रिंग होती है।
- फ़ील्डविड्थ: संख्याओं की एक स्पेस-सेपरेटेड सूची जो GAWK को FS वेरिएबल का उपयोग करने के बजाय निश्चित फ़ील्ड चौड़ाई के आधार पर रिकॉर्ड को पार्स करने का निर्देश देती है।
- एक प्रकार का वृक्ष: यह लिंटिंग पर गतिशील नियंत्रण प्रदान करता है। इसे सेट करने से गैर-पोर्टेबल या संदिग्ध कोड संरचनाओं के बारे में चेतावनियाँ सक्षम हो जाती हैं।
- PROCINFO: एक एसोसिएटिव ऐरे जिसमें चल रही प्रक्रिया के बारे में जानकारी होती है, जैसे कि उसकी प्रक्रिया आईडी (PROCINFO[“pid”])।
- टेक्स्टडोमेन: इसका उपयोग अंतर्राष्ट्रीयकरण के लिए किया जाता है, जो स्थानीयकृत प्रोग्राम स्ट्रिंग को पुनः प्राप्त करने के लिए पाठ डोमेन को निर्दिष्ट करता है।
- बिनमोड: गैर-POSIX सिस्टम पर फ़ाइल I/O संचालन के लिए बाइनरी मोड निर्दिष्ट करने के लिए उपयोग किया जाता है।
अब जब हम समझ गए हैं कि AWK वेरिएबल्स के माध्यम से डेटा को कैसे स्टोर करता है और उस तक पहुंच प्रदान करता है, तो अगला तार्किक कदम उस डेटा में हेरफेर करने के लिए उपयोग किए जाने वाले ऑपरेटरों का पता लगाना है।