Linux-AWK/C2/Built-in-Variables-in-awk/Hindi
From Script | Spoken-Tutorial
Revision as of 12:10, 28 June 2019 by Sakinashaikh (Talk | contribs)
|
|
00:01 | awk built-in variablesऔर awk script पर स्पोकन ट्यूटोरियल में आपका स्वागत है। |
00:07 | इस ट्यूटोरियल में हम Built-in variables , awk script के बारे में सीखेंगे। |
00:14 | हम इसे कुछ उदाहरण के माध्यम से करेंगे। |
00:17 | इस ट्यूटोरियल को रिकॉर्ड करने के लिए, मैं उपयोग कर रही हूँ Ubuntu Linux 16.04 Operating System और gedit text editor 3.20.1 |
00:30 | इस ट्यूटोरियल में उपयोगित फाइल्स इस ट्यूटोरियल के पेज पर Code Files लिंक में उपलब्ध है। कृपया डाउनलोड करें और उनका उपयोग करें। |
00:40 | इस ट्यूटोरियल का अभ्यास करने के लिए, आपको इस वेबसाइट पर पहले awk ट्यूटोरियल्स को देखना चाहिए। |
00:47 | यदि नहीं, तो कृपया इस वेबसाइट पर समरूपी ट्यूटोरियल्स देखें। |
00:52 | पहले awk में कुछ built-in variables देखते हैं। |
00:57 | केपिटल RS एक इनपुट फाइल में record separator निर्दिष्ट करता है। डिफॉल्ट रूप से यह newline है। |
01:07 | केपिटल FS एक इनपुट फाइल में field separator निर्दिष्ट करता है। |
01:13 | डिफॉल्ट रूप से FS की वेल्यू whitespace है। |
01:18 | केपिटल ORS output record separator को परिभाषित करता है। डिफॉल्ट रूप से यह newline है। |
01:27 | केपिटल OFS output field separator को परिभाषित करता है। डिफॉल्ट रूप से यह whitespace है। |
01:36 | इन सबका अर्थ समझते हैं। |
01:40 | अब awkdemo फाइल पर एक नजर डालें। |
01:44 | जब हम awk कमांड के साथ इस awkdemo फाइल प्रोसेस कर रहे हैं, यह हमारी इनपुट फ़ाइल बन जाती है |
01:51 | ध्यान दें कि सभी रिकॉर्ड newline character द्वारा एक दूसरे से विभाजित हैं। |
01:58 | newline record separator RS variable के लिए डिफॉल्ट वेल्यू है। अतः यहाँ कुछ करने की आवश्यकता नहीं है। |
02:08 | ध्यान दें सभी फिल्ड्स pipe symbol द्वारा विभाजित हैं। हम awk को इसके बारे में कैसे बताएं। देखते हैं। |
02:18 | डिफॉल्ट रूप से spaces या tabs की कोई भी संख्या फिल्ड्स को पृथक करती है। |
02:24 | हम hyphen capital F ऑप्शन की मदद से इसे रिसेट कर सकते हैं जैसा पहले के ट्यूटोरियल्स में सीखा। |
02:33 | या हम FS variable के उपयोग से BEGIN section में इसे रिसेट कर सकते हैं। |
02:40 | इसे एक उदाहरण के माध्यम से करते हैं।
मान लीजिए, मैं उन छात्रों के नाम का पता लगाना चाहती हूँ, जिन्हें 5000 रुपये से अधिक का स्टाइपेन्ड मिल रहा है। |
02:51 | CTRL, ALT और T कीज दबाकर टर्मिनल खोलें। |
02:57 | cd कमांड का उपयोग करके उस फोल्डर पर जाएं, जिसमें आपने Code Files को डाउनलोड और एक्स्ट्रैक्ट करके रखा है। |
03:04 | यहाँ दिखाए गए अनुसार कमांड टाइप करें। |
03:08 | यहाँ BEGIN सेक्शन में, हमने pipe symbol के रूप में FS की वेल्यू असाइन की है। उसी तरह से हम RS variable को संशोधित कर सकते हैं। |
03:19 | कमांड को निष्पादित करने के लिए एंटर दबाएं। |
03:23 | आउटपुट उन छात्रों की सूची दिखाता है, जो स्टाइपेंड के रूप में रु 5000 से अधिक प्राप्त कर रहे हैं। |
03:30 | यहाँ name फिल्ड और stipend फिल्ड खाली space द्वारा पृथक है। |
03:36 | साथ ही, सभी रिकॉर्ड्स newline character पृथक हैं। |
03:42 | मान लीजिए हमें output field separator के रूप में colon और output record separator के रूप में डबल newline चाहिए। |
03:52 | हम इसे कैसे कर सकते हैं? देखते हैं। |
03:55 | पिछली निष्पादित कमांड को प्राप्त करने के लिए टर्मिनल में अप ऐरो की दबाएं। |
04:01 | यहाँ दिखाए गए अनुसार कमांड को संशोधित करें और फिर एंटर दबाएं। |
04:08 | हमें इच्छित फॉर्मेट में आउटपुट प्राप्त होता है। |
04:12 | अब मान लीजिए कि हमारी इनपुट फाइल sample.txt है। |
04:18 | ध्यान दें कि यहाँ field separator newline है और record separator डबल newline है। |
04:27 | हम इस फाइल से रोल नम्बर और नाम की जानकारी कैसे ले सकते हैं? |
04:32 | हाँ, आपने सही अनुमान लगाया। हमें दोनों FS और RS variables को संशोधित करना होगा। |
04:39 | यह ट्यूटोरियल रोकें और नियत कार्य के रूप में इसे करें। |
04:43 | अब अन्य built-in variables देखते हैं। |
04:47 | केपिटल NR awk द्वारा प्रोसेस किए गए Number of Records देता है। |
04:53 | केपिटल ' NF' वर्तमान रिकॉर्ड में Number of Fields देता है। |
04:59 | इस पर एक उदाहरण देखते हैं।
मान लीजिए, हम फाइल में अपूर्ण लाइन्स पता करना चाहते हैं। |
05:07 | यहाँ, अपूर्ण लाइन का मतलब है कि यह सामान्य 6 फिल्ड्स से कम है। |
05:13 | टर्मिनल पर जाएं। Ctrl और L कीज का उपयोग करके टर्मिनल साफ करें। |
05:20 | दिखाए गए अनुसार कमांड टाइप करें। |
05:24 | क्योंकि फिल्ड्स pipe symbol द्वारा पृथक हैं, BEGIN सेक्शन में pipe symbol के लिए FS वेल्यू सेट करें। |
05:33 | आगे हमने लिखा NF not equal to 6 |
05:37 | यह जाँच करता है कि वर्तमान लाइन में फ़िल्ड्स की संख्या 6 के बराबर नहीं है। |
05:43 | यदि यह सही है, तो प्रिंट सेक्शन $0 द्वारा निरूपित पूरी लाइन के साथ रिकॉर्ड का लाइन नंबर NR प्रिंट करेगा। एंटर दबाएं। |
05:55 | आउटपुट में, हम देख सकते हैं कि रिकॉर्ड नंबर 16 अपूर्ण रिकॉर्ड है। इसमें 6 के बजाय केवल 5 फिल्ड्स हैं। |
06:05 | एक और उदाहरण देखते हैं।
यहाँ कितने फिल्ड्स हैं यह परवाह किए बिना, हम प्रत्येक छात्र के लिए पहला और अंतिम फिल्ड कैसे प्रिंट कर सकते हैं? |
06:16 | यहाँ दिखाए गए अनुसार टर्मिनल पर कमांड टाइप करें। |
06:21 | यहाँ हमने FS variable सेट करने के बजाय hyphen capital F ऑप्शन का उपयोग किया। एंटर दबाएं। |
06:30 | हमें फाइल में प्रत्येक रिकॉर्ड के लिए केवल पहला और अंतिम फिल्ड्स प्राप्त होता है। |
06:36 | अब कुछ और देखते हैं। |
06:39 | मान लीजिए, छात्रों का रिकॉर्ड demo1.txt, demo2.txt दो फाइल्स में वितरित है। |
06:48 | हम इन दो फाइल्स में से प्रत्येक से पहली 3 लाइन्स प्रिंट करना चाहते हैं।
हम यह NR variable का उपयोग करके कर सकते हैं। |
06:57 | यहाँ दो फाइल्स का कंटेंट है। |
07:02 | अब प्रत्येक फाइल से पहली 3 लाइन प्रदर्शित करने के लिए, टर्मिनल पर निम्न कमांड टाइप करें। |
07:11 | एंटर दबाएं। |
07:13 | आउटपुट demo1.txt फाइल के केवल पहले 3 रिकॉर्ड दिखाता है। |
07:20 | हम दूसरी फाइल के लिए भी वही कैसे प्रिंट कर सकते हैं? |
07:24 | हल है NR के बजाय FNR का उपयोग करना।
FNR वर्तमान फाइल में current record number है। |
07:34 | हर बार एक नया रिकॉर्ड पढ़े जाने के बाद FNR बढ़ जाता है। |
07:39 | हर बार एक नई इनपुट फ़ाइल शुरू होने पर इसे शून्य किया जाता है। |
07:46 | लेकिन NR इनपुट के रिकॉर्ड की संख्या है जिसे awk ने प्रोग्राम के निष्पादन की शुरुआत से संसाधित किया है। |
07:55 | इसे नई फाइल के साथ शून्य रिसेट नहीं किया जाता है। |
07:59 | टर्मिनल पर जाएं। पिछली निष्पादित कमांड को प्राप्त करने के लिए अप ऐरो की दबाएं। |
08:06 | नीचे दिए गए अनुसार पिछली कमांड में बदलाव करें ।
NR के बजाय FNR टाइप करें। |
08:14 | NR के आगे Print सेक्शन में टाइप करें FNR. एटर दबाएं। |
08:21 | देखें, अब हमें सही आउटपुट मिलता है।
FNR नई फ़ाइल के साथ शून्य पर सेट है लेकिन' NR बढ़ता रहता है। |
08:31 | अब कुछ अन्य built-in variables देखते हैं। FILENAME वेरिएबल पढ़ी जाने वाली फ़ाइल का नाम देता है। |
08:40 | ARGC कमांड लाइन में दिए गए arguments की संख्या निर्दिष्ट करता है। |
08:46 | ARGV एक array का प्रतिनिधित्व करता है, जो command line arguments को संचित करता है। |
08:52 | ENVIRON shell environment variables का array और समरूपी वेल्यूज निर्दिष्ट करता है। |
09:00 | ARGV और ENVIRON awk में array का उपयोग करते हैं, हम बाद के ट्यूटोरियल में उन पर गौर करेंगे। |
09:09 | अब FILENAME वेरिएबल पर एक नजर डालते हैं।
हम संसाधित की जा रही वर्तमान फ़ाइल का नाम कैसे प्रिंट कर सकते हैं? |
09:18 | टर्मिनल पर जाएं और दिखाए गए अनुसार कमांड टाइप करें। |
09:23 | यहाँ हमने string concatenation operator के रूप में space का उपयोग किया है। कमांड निष्पादित करने के लिए एंटर दबाएं। |
09:32 | आउटपुट कई बार input filename दिखाता है। |
09:37 | ऐसा इसलिए, क्योंकि यह कमांड awkdemo.txt फाइल में प्रत्येक रो के लिए एक बार फाइलनाम प्रिंट करता है। हम इसे केवल एक बार कैसे प्रिंट कर सकते हैं? |
09:48 | टर्मिनल साफ करें। पिछली निष्पादित कमांड को प्राप्त करने के लिए अप ऐरो की दबाएं। |
09:55 | यहाँ दिखाए गए अनुसार पिछली कमांड में बदलाव करें। एंटर दबाएं। |
10:02 | अब हमें फाइलनाम केवल एक बार मिलता है। |
10:06 | यहाँ awk में कुछ अन्य built-in variables हैं। कृपया उन पर जानकारी के लिए इंटरनेट ब्राउज़ करें। |
10:14 | मान लीजिए, हम उन छात्रों को ढूंढना चाहते हैं जो उत्तीर्ण हुए हैं और जिनका स्टाइपेंड 8000 रूपये से अधिक है |
10:22 | output field separator के रूप में comma का उपयोग करें और footer section में फाइल के लिए दिखाया गया डेटा और फाइल का नाम प्रिंट करें।
हम यह कैसे कर सकते हैं? |
10:36 | टर्मिनल पर निम्न कमांड टाइप करें। एंटर दबाएं। |
10:43 | हम देख सकते हैं कि केवल एक छात्र उत्तीर्ण हुआ है और 8000 रूपये से अधिक स्टाइपेंड प्राप्त करता है।
और रिकॉर्ड नंबर 2 है। |
10:53 | हम अपेक्षानुसार footer में फाइल का नाम भी देख सकते हैं। |
10:58 | हम अधिक से अधिक जटिल कार्यों के लिए awk का उपयोग कर सकते हैं। |
11:03 | वैसे मामले में, टर्मिनल पर हर बार कमांड लिखना अधिक कठिन हो जाता है। |
11:09 | हम इसके बजाय एक अलग फ़ाइल में awk प्रोग्राम लिख सकते हैं। |
11:14 | निष्पादन योग्य होने के लिए, उस फ़ाइल में dot awk एक्सटेंशन होना चाहिए। |
11:19 | निष्पादित करते समय, हम इस awk प्रोग्राम फाइलनाम को awk कमांड के साथ निर्दिष्ट कर सकते हैं। |
11:26 | ऐसा करने के लिए, हमें hyphen small f ऑप्शन उपयोग करने की आवश्यकता है। एक उदाहरण देखते हैं। |
11:35 | मैंने पहले ही एक awk प्रोग्राम लिखा है और prog1 dot awk के रूप में सेव किया है। |
11:42 | यह कोड Code Files लिंक में उपलब्ध है। |
11:46 | टर्मिनल पर जाएं। देखें पिछली निष्पादित कमांड के single quotes में हमने क्या लिखा है? |
11:55 | prog1.awk फाइल का कंटेंट बिल्कुल समान है। |
12:00 | awk फाइल में केवल अंतर यह है कि हमने single quotes में नहीं लिखा है। |
12:07 | फाइल को निष्पादित करने के लिए टर्मिनल पर निम्न टाइप करें,
awk space hyphen small f space prog1.awk space awkdemo.txt और एंटर दबाएं। |
12:24 | हम ठीक वैसा ही आउटपुट प्राप्त कर रहे हैं जैसा हमने पहले देखा है। |
12:29 | अतः इस तरह हम awk प्रोग्राम्स लिख सकते हैं और कई बार इसका उपयोग कर सकते हैं। |
12:35 | इसी के साथ हम इस ट्यूटोरियल के अंत में आ गए हैं। संक्षेप में.. |
12:40 | इस ट्यूटोरियल में हमने कई उदाहरणों का उपयोग करके 'Built-in variables,
awk script के बारे में सीखा । |
12:48 | एक नियत कार्य के रूप में awkdemo.txt फाइल में पांचवीं लाइन के अंतिम फिल्ड को प्रिंट करने के लिए awk स्क्रिप्ट लिखें। |
12:58 | टर्मिनल पर /etc/passwd सिस्टम फाइल खोलें। |
13:05 | उसमें सभी separators की पहचान करें। |
13:09 | अब बीसवीं लाइन से आगे फाइल को प्रोसेस करने के लिए स्क्रिप्ट लिखें। |
13:15 | वह भी, केवल उन लाइन्स के लिए जिनमें 6 से अधिक फिल्ड्स हैं। |
13:20 | आपको उस विशेष लाइन में लाइन नंबर, पूरी लाइन और फिल्ड्स की गिनती प्रिंट करनी चाहिए। |
13:28 | निम्नलिखित लिंक पर मौजूद वीडियो, स्पोकन ट्यूटोरियल प्रोजेक्ट को सारांशित करता है। कृपया इसे डाउनलोड करें और देखें। |
13:36 | स्पोकन ट्यूटोरियल प्रोजेक्ट टीम, स्पोकन ट्यूटोरियल्स का उपयोग करके कार्यशालाएँ आयोजित करती है और प्रमाणपत्र देती है। अधिक जानकारी के लिए, कृपया हमें लिखें। |
13:47 | कृपया अपनी समयबद्ध क्वेरी इस फोरम में पोस्ट करें। |
13:51 | स्पोकन ट्यूटोरियल प्रोजेक्ट NMEICT, MHRD, भारत सरकार द्वारा वित्त पोषित है। इस मिशन पर अधिक जानकारी दिखाए गए लिंक पर उपलब्ध है। |
14:03 | यह स्क्रिप्ट विकास द्वारा अनुवादित है। मैं जया अब आपसे विदा लेती हूँ।
हमसे जुडने के लिए धन्यवाद। |