
यह नई awk ट्यूटोरियल श्रृंखला का पहला लेख है। हम आने वाले हफ्तों में awk पर कई लेख पोस्ट करेंगे जो व्यावहारिक उदाहरणों के साथ awk की सभी सुविधाओं को कवर करेंगे।
इस लेख में, आइए 7 व्यावहारिक awk प्रिंट उदाहरणों के साथ मौलिक awk कार्यप्रणाली की समीक्षा करें।
नोट: सुनिश्चित करें कि आप हमारे पहले के Sed ट्यूटोरियल श्रृंखला की समीक्षा करते हैं।
Awk परिचय और प्रिंटिंग ऑपरेशन
Awk एक प्रोग्रामिंग भाषा है जो संरचित डेटा के आसान हेरफेर और स्वरूपित रिपोर्ट की पीढ़ी की अनुमति देती है। Awk इसके लेखकों के नामों "Aho, Weinberger, और Kernighan" के लिए खड़ा है।
Awk का उपयोग ज्यादातर पैटर्न स्कैनिंग और प्रोसेसिंग के लिए किया जाता है। यह एक या अधिक फ़ाइलों को खोजता है यह देखने के लिए कि क्या उनमें ऐसी लाइनें हैं जो निर्दिष्ट पैटर्न से मेल खाती हैं और फिर संबंधित कार्रवाई करती हैं।
Awk की कुछ प्रमुख विशेषताएं हैं:
- Awk एक टेक्स्ट फ़ाइल को रिकॉर्ड और फ़ील्ड के रूप में देखता है।
- सामान्य प्रोग्रामिंग भाषा की तरह, Awk में चर, सशर्त और लूप होते हैं
- Awk में अंकगणितीय और स्ट्रिंग ऑपरेटर होते हैं।
- Awk स्वरूपित रिपोर्ट उत्पन्न कर सकता है
Awk एक फ़ाइल से या अपने मानक इनपुट से पढ़ता है, और अपने मानक आउटपुट पर आउटपुट करता है। Awk नॉन-टेक्स्ट फ़ाइलों के साथ नहीं मिलता।
Syntax: awk '/search pattern1/ {Actions} /search pattern2/ {Actions}' file उपरोक्त awk सिंटैक्स में:
- search pattern एक नियमित अभिव्यक्ति है।
- Actions - किए जाने वाले कथन।
- Awk में कई पैटर्न और क्रियाएं संभव हैं।
- file - इनपुट फ़ाइल।
- प्रोग्राम के चारों ओर सिंगल कोट्स शेल को इसके किसी भी विशेष वर्ण की व्याख्या नहीं करने से रोकने के लिए है।
Awk कार्यप्रणाली
- Awk इनपुट फ़ाइलों को एक बार में एक लाइन पढ़ता है।
- प्रत्येक लाइन के लिए, यह दिए गए क्रम में दिए गए पैटर्न से मेल खाता है, यदि मेल खाता है तो संबंधित कार्रवाई करता है।
- यदि कोई पैटर्न मेल नहीं खाता है, तो कोई कार्रवाई नहीं की जाएगी।
- उपरोक्त सिंटैक्स में, या तो खोज पैटर्न या कार्रवाई वैकल्पिक हैं, लेकिन दोनों नहीं।
- यदि खोज पैटर्न नहीं दिया गया है, तो Awk इनपुट की प्रत्येक लाइन के लिए दी गई क्रियाएं करता है।
- यदि कार्रवाई नहीं दी गई है, तो उन सभी लाइनों को प्रिंट करें जो दिए गए पैटर्न से मेल खाती हैं जो डिफ़ॉल्ट कार्रवाई है।
- बिना किसी कार्रवाई के खाली ब्रेस कुछ नहीं करते हैं। यह डिफ़ॉल्ट प्रिंटिंग ऑपरेशन नहीं करेगा।
- Actions में प्रत्येक कथन सेमीकॉलन द्वारा सीमांकित होना चाहिए।
आइए employee.txt फ़ाइल बनाएं जिसमें निम्न सामग्री हो, जिसका उपयोग नीचे उल्लिखित उदाहरणों में किया जाएगा।
$cat employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
Awk उदाहरण 1. Awk का डिफ़ॉल्ट व्यवहार
डिफ़ॉल्ट रूप से Awk फ़ाइल से हर लाइन प्रिंट करता है।
$ awk '{print;}' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000 उपरोक्त उदाहरण में पैटर्न नहीं दिया गया है। इसलिए क्रियाएं सभी लाइनों पर लागू होती हैं।
बिना किसी तर्क के प्रिंट एक्शन डिफ़ॉल्ट रूप से पूरी लाइन प्रिंट करता है। इसलिए यह बिना किसी असफलता के फ़ाइल की सभी लाइनें प्रिंट करता है। Actions को ब्रेसिज़ में संलग्न करना होगा।
Awk उदाहरण 2. उन लाइनों को प्रिंट करें जो पैटर्न से मेल खाती हैं।
$ awk '/Thomas/ > /Nisha/' employee.txt 100 Thomas Manager Sales $5,000 400 Nisha Manager Marketing $9,500
उपरोक्त उदाहरण में यह उन सभी लाइनों को प्रिंट करता है जो 'Thomas' या 'Nisha' से मेल खाती हैं। इसमें दो पैटर्न हैं। Awk किसी भी संख्या में पैटर्न स्वीकार करता है, लेकिन प्रत्येक सेट (पैटर्न और इसकी संबंधित क्रियाएं) को न्यूलाइन द्वारा अलग किया जाना चाहिए।
Awk उदाहरण 3. केवल विशिष्ट फ़ील्ड प्रिंट करें।
Awk में कई बिल्ट-इन चर हैं। प्रत्येक रिकॉर्ड यानी लाइन के लिए, यह रिकॉर्ड को डिफ़ॉल्ट रूप से व्हाइटस्पेस वर्ण द्वारा सीमांकित करके विभाजित करता है और इसे $n चर में संग्रहीत करता है। यदि लाइन में 4 शब्द हैं, तो यह $1, $2, $3 और $4 में संग्रहीत किया जाएगा। $0 पूरी लाइन को दर्शाता है। NF एक बिल्ट-इन चर है जो एक रिकॉर्ड में फ़ील्ड की कुल संख्या को दर्शाता है।
$ awk '{print $2,$5;}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,000 $ awk '{print $2,$NF;}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,000 उपरोक्त उदाहरण में $2 और $5 क्रमशः नाम और वेतन को दर्शाते हैं। हम $NF का उपयोग करके वेतन भी प्राप्त कर सकते हैं, जहां $NF अंतिम फ़ील्ड को दर्शाता है। प्रिंट स्टेटमेंट में ',' एक कंकेटनेटर है।
Awk उदाहरण 4. प्रारंभिक और अंतिम कार्रवाई
Awk में दो महत्वपूर्ण पैटर्न हैं जिन्हें BEGIN और END कीवर्ड द्वारा निर्दिष्ट किया जाता है।
Syntax: BEGIN { Actions} {ACTION} # Action for everyline in a file END { Actions } # Awk में टिप्पणियों के लिए है END क्रियाएं इनपुट से लाइनों को पढ़ने और संसाधित करने को पूरा करने के बाद की जाएंगी।
$ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";} > {print $2,"\t",$3,"\t",$4,"\t",$NF;} > END{print "Report Generated\n--------------"; > }' employee.txt Name Designation Department Salary Thomas Manager Sales $5,000 Jason Developer Technology $5,500 Sanjay Sysadmin Technology $7,000 Nisha Manager Marketing $9,500 Randy DBA Technology $6,000 Report Generated -------------- उपरोक्त उदाहरण में, यह रिपोर्ट के लिए शीर्षक और अंतिम पंक्ति प्रिंट करता है।
Awk उदाहरण 5. उन कर्मचारियों को ढूंढें जिनका कर्मचारी आईडी 200 से अधिक है
$ awk '$1 >200' employee.txt 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
उपरोक्त उदाहरण में, पहला फ़ील्ड ($1) कर्मचारी आईडी है। इसलिए यदि $1 200 से अधिक है, तो पूरी लाइन प्रिंट करने के लिए डिफ़ॉल्ट प्रिंट एक्शन करें।
Awk उदाहरण 6. प्रौद्योगिकी विभाग में कर्मचारियों की सूची प्रिंट करें
अब विभाग का नाम चौथे फ़ील्ड के रूप में उपलब्ध है, इसलिए जांचें कि क्या $4 स्ट्रिंग "Technology" से मेल खाता है, यदि हां तो लाइन प्रिंट करें।
$ awk '$4 ~/Technology/' employee.txt 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 500 Randy DBA Technology $6,000
ऑपरेटर ~ नियमित अभिव्यक्तियों के साथ तुलना करने के लिए है। यदि यह मेल खाता है तो डिफ़ॉल्ट कार्रवाई यानी पूरी लाइन प्रिंट करना की जाएगी।
Awk उदाहरण 7. प्रौद्योगिकी विभाग में कर्मचारियों की संख्या प्रिंट करें
नीचे दिया गया उदाहरण जांचता है कि विभाग प्रौद्योगिकी है या नहीं, यदि हां तो कार्रवाई में, केवल काउंट चर को बढ़ाएं, जिसे BEGIN अनुभाग में शून्य से आरंभ किया गया था।
$ awk 'BEGIN { count=0;} $4 ~ /Technology/ { count++; } END { print "Number of employees in Technology Dept =",count;}' employee.txt Number of employees in Tehcnology Dept = 3 फिर प्रक्रिया के अंत में, काउंट का मान प्रिंट करें जो आपको प्रौद्योगिकी विभाग में कर्मचारियों की संख्या देता है।
अनुशंसित पठन
Sed and Awk 101 Hacks, रमेश नटराजन द्वारा. मैं UNIX / लिनक्स वातावरण में टेक्स्ट फ़ाइलों (डेटा, कॉन्फिग, और लॉग फ़ाइलों) से निपटने में प्रति दिन कई घंटे बिताता हूं। मैं अपने सभी टेक्स्ट हेरफेर कार्य के लिए Sed और Awk का उपयोग करता हूं। अपने Sed और Awk अनुभव के आधार पर, मैंने Sed and Awk 101 Hacks ईबुक लिखी है जिसमें Sed और Awk की विभिन्न उन्नत सुविधाओं पर 101 व्यावहारिक उदाहरण हैं जो आपके UNIX / लिनक्स जीवन को बढ़ाएंगे। यहां तक कि अगर आप कई वर्षों से Sed और Awk का उपयोग कर रहे हैं और इस पुस्तक को नहीं पढ़ा है, तो कृपया अपना उपकार करें और इस पुस्तक को पढ़ें। आप Sed और Awk उपयोगिताओं की क्षमताओं से चकित होंगे।
अतिरिक्त Awk लेख
- 3 व्यावहारिक उदाहरणों के साथ Awk उपयोगकर्ता-परिभाषित चर
- 8 शक्तिशाली Awk बिल्ट-इन चर - FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
- 7 शक्तिशाली Awk ऑपरेटर उदाहरण (यूनरी, बाइनरी, अंकगणितीय, स्ट्रिंग, असाइनमेंट, सशर्त, रेगेक्स Awk ऑपरेटर)
- 4 Awk If स्टेटमेंट उदाहरण (if, if else, if else if, : ? )
- लूप में फंस गए? Awk While, Do While, For Loop, Break, Continue, Exit उदाहरण