<पी> यह नई awk ट्यूटोरियल श्रृंखला पर पहला लेख है। हम आगामी सप्ताहों में awk पर कई लेख पोस्ट करेंगे जिनमें व्यावहारिक उदाहरणों के साथ awk की सभी विशेषताओं को शामिल किया जाएगा। <पी> इस लेख में, आइए हम 7 व्यावहारिक awk प्रिंट उदाहरणों के साथ मौलिक awk कार्य पद्धति की समीक्षा करें। ध्यान दें: सुनिश्चित करें कि आप हमारी पिछली सेड ट्यूटोरियल श्रृंखला की समीक्षा करें।
Awk परिचय और मुद्रण संचालन
<पी> Awk एक प्रोग्रामिंग भाषा है जो संरचित डेटा के आसान हेरफेर और स्वरूपित रिपोर्ट तैयार करने की अनुमति देती है। Awk का अर्थ इसके लेखकों के नाम “A” से है हो,व ईनबर्गर, और संकेत एर्निघन” <पी> Awk का उपयोग ज्यादातर पैटर्न स्कैनिंग और प्रोसेसिंग के लिए किया जाता है। यह यह देखने के लिए एक या अधिक फ़ाइलों को खोजता है कि क्या उनमें निर्दिष्ट पैटर्न से मेल खाने वाली लाइनें हैं और फिर संबंधित क्रियाएं निष्पादित करता है। <पी> Awk की कुछ प्रमुख विशेषताएं हैं:- Awk एक टेक्स्ट फ़ाइल को रिकॉर्ड और फ़ील्ड के रूप में देखता है।
- आम प्रोग्रामिंग भाषा की तरह, Awk में वैरिएबल, कंडीशनल और लूप हैं
- Awk में अंकगणित और स्ट्रिंग ऑपरेटर हैं।
- Awk स्वरूपित रिपोर्ट तैयार कर सकता है
Syntax:
awk '/search pattern1/ {Actions}
/search pattern2/ {Actions}' file <पी> उपरोक्त awk सिंटैक्स में: - खोज पैटर्न एक नियमित अभिव्यक्ति है।
- कार्रवाई - कथन निष्पादित किया जाना है।
- Awk में कई पैटर्न और क्रियाएं संभव हैं।
- फ़ाइल – इनपुट फ़ाइल.
- प्रोग्राम के चारों ओर एकल उद्धरण शेल से बचने के लिए है, न कि इसके किसी विशेष वर्ण की व्याख्या करने के लिए।
Awk कार्य पद्धति
- Awk इनपुट फ़ाइलों को एक समय में एक पंक्ति पढ़ता है।
- प्रत्येक पंक्ति के लिए, यह दिए गए क्रम में दिए गए पैटर्न से मेल खाता है, यदि मिलान संबंधित क्रिया करता है।
- यदि कोई पैटर्न मेल नहीं खाता है, तो कोई कार्रवाई नहीं की जाएगी।
- उपरोक्त सिंटैक्स में, खोज पैटर्न या क्रिया वैकल्पिक हैं, लेकिन दोनों नहीं।
- यदि खोज पैटर्न नहीं दिया गया है, तो Awk इनपुट की प्रत्येक पंक्ति के लिए दी गई क्रियाएं करता है।
- यदि कार्रवाई नहीं दी गई है, तो उन सभी पंक्तियों को प्रिंट करें जो दिए गए पैटर्न से मेल खाती हैं जो कि डिफ़ॉल्ट कार्रवाई है।
- बिना किसी क्रिया के खाली ब्रेसिज़ से कुछ नहीं होता। यह डिफ़ॉल्ट मुद्रण कार्य नहीं करेगा.
- क्रियाओं में प्रत्येक कथन को अर्धविराम द्वारा सीमांकित किया जाना चाहिए।
उदाहरण नीचे उल्लिखित हैं।
$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 <पी> उपरोक्त उदाहरण में पैटर्न नहीं दिया गया है। अतः क्रियाएँ सभी पंक्तियों पर लागू होती हैं। एक्शन प्रिंट बिना किसी तर्क के डिफ़ॉल्ट रूप से पूरी लाइन प्रिंट करता है। तो यह सभी को प्रिंट करता है
फ़ाइल की पंक्तियाँ विफल रहीं। क्रियाओं को ब्रेसिज़ में संलग्न किया जाना चाहिए।
Awk उदाहरण 2. उन पंक्तियों को प्रिंट करें जो पैटर्न से मेल खाती हैं।
$ awk '/Thomas/ > /Nisha/' employee.txt 100 Thomas Manager Sales $5,000 400 Nisha Manager Marketing $9,500<पी> उपरोक्त उदाहरण में यह उन सभी पंक्तियों को प्रिंट करता है जो 'थॉमस' या 'निशा' से मेल खाती हैं। इसके दो पैटर्न हैं. Awk किसी भी संख्या में पैटर्न को स्वीकार करता है, लेकिन प्रत्येक सेट (पैटर्न और उसके अनुरूप क्रियाएं) को नई लाइन द्वारा अलग करना होगा।
Awk उदाहरण 3. केवल विशिष्ट फ़ील्ड प्रिंट करें।
<पी> Awk में कई अंतर्निहित वेरिएबल हैं। प्रत्येक रिकॉर्ड यानी लाइन के लिए, यह डिफ़ॉल्ट रूप से व्हाइटस्पेस कैरेक्टर द्वारा सीमांकित रिकॉर्ड को विभाजित करता है और इसे $n वेरिएबल्स में संग्रहीत करता है। यदि पंक्ति में 4 शब्द हैं, तो इसे $1, $2, $3 और $4 में संग्रहीत किया जाएगा। $0 पूरी लाइन को दर्शाता है. एनएफ एक अंतर्निर्मित वैरिएबल है जो एक रिकॉर्ड में फ़ील्ड की कुल संख्या का प्रतिनिधित्व करता है।$ 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 }
# is for comments in Awk <पी> BEGIN अनुभाग में निर्दिष्ट क्रियाएं इनपुट से पंक्तियों को पढ़ना शुरू करने से पहले निष्पादित की जाएंगी। इनपुट से पंक्तियों को पढ़ने और संसाधित करने के बाद 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 स्ट्रिंग "प्रौद्योगिकी" से मेल खाता है, यदि हाँ तो लाइन प्रिंट करें।$ 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, रमेश नटराजन द्वारा . मैं प्रतिदिन कई घंटे यूनिक्स/लिनक्स वातावरण पर टेक्स्ट फ़ाइलों (डेटा, कॉन्फ़िगरेशन और लॉग फ़ाइलों) से निपटने में बिताता हूं। मैं अपने सभी टेक्स्ट हेरफेर कार्यों के लिए Sed और Awk का उपयोग करता हूं। अपने Sed और Awk अनुभव के आधार पर, मैंने Sed और Awk 101 Hacks eBook लिखी है जिसमें Sed और Awk की विभिन्न उन्नत सुविधाओं पर 101 व्यावहारिक उदाहरण हैं जो आपके UNIX / Linux जीवन को बढ़ाएंगे। भले ही आप कई वर्षों से सेड और ऑक का उपयोग कर रहे हों और आपने यह पुस्तक नहीं पढ़ी हो, कृपया अपने आप पर एक उपकार करें और इस पुस्तक को पढ़ें। आप Sed और Awk उपयोगिताओं की क्षमताओं से चकित रह जाएंगे। अतिरिक्त अजीब लेख
- 3 व्यावहारिक उदाहरणों के साथ उपयोगकर्ता-परिभाषित चर देखें
- 8 शक्तिशाली Awk बिल्ट-इन वेरिएबल - FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
- 7 शक्तिशाली Awk ऑपरेटर्स उदाहरण (यूनरी, बाइनरी, अंकगणित, स्ट्रिंग, असाइनमेंट, कंडीशनल, रेग-एक्स Awk ऑपरेटर्स)
- 4 Awk यदि कथन उदाहरण (यदि, यदि अन्यथा, यदि अन्यथा यदि, :? )
- लूप में फंस गए? जागते रहो, करते रहो, लूप के लिए, तोड़ो, जारी रखो, बाहर निकलो उदाहरण