टेक्स्ट डेटा या फ़ाइल से रिपोर्ट खोजने और उत्पन्न करने के लिए लिनक्स ऑपरेटिंग सिस्टम में कई उपयोगिता उपकरण मौजूद हैं। उपयोगकर्ता awk, grep और sed कमांड का उपयोग करके कई प्रकार की खोज, प्रतिस्थापन और रिपोर्ट जनरेटिंग कार्यों को आसानी से कर सकता है। awk सिर्फ एक कमांड नहीं है। यह एक स्क्रिप्टिंग भाषा है जिसका उपयोग टर्मिनल और awk फ़ाइल दोनों से किया जा सकता है। यह अन्य स्क्रिप्टिंग भाषाओं की तरह चर, सशर्त विवरण, सरणी, लूप आदि का समर्थन करता है। यह किसी भी फ़ाइल सामग्री लाइन को लाइन से पढ़ सकता है और एक विशिष्ट सीमांकक के आधार पर फ़ील्ड या कॉलम को अलग कर सकता है। यह टेक्स्ट सामग्री या फ़ाइल में विशेष स्ट्रिंग को खोजने के लिए नियमित अभिव्यक्ति का भी समर्थन करता है और यदि कोई मेल मिलता है तो कार्रवाई करता है। आप awk कमांड का उपयोग कैसे कर सकते हैं और स्क्रिप्ट को इस ट्यूटोरियल में 20 उपयोगी उदाहरणों का उपयोग करके दिखाया गया है।
सामग्री:
- awk with printf
- सफेद जगह पर विभाजित करने के लिए अजीब
- awk सीमांकक बदलने के लिए
- टैब-सीमांकित डेटा के साथ अजीब
- csv डेटा के साथ awk
- awk रेगेक्स
- अजीब मामला असंवेदनशील रेगेक्स
- nf (फ़ील्ड की संख्या) चर के साथ awk
- awk gensub () फ़ंक्शन
- रैंड () फ़ंक्शन के साथ awk
- अजीब उपयोगकर्ता परिभाषित समारोह
- awk if
- अजीब चर
- अजीब सरणियाँ
- awk लूप
- पहला कॉलम प्रिंट करने के लिए awk
- अंतिम कॉलम को प्रिंट करने के लिए awk
- awk with grep
- बैश स्क्रिप्ट फ़ाइल के साथ awk
- awk साथ sed
प्रिंटफ के साथ awk का उपयोग करना
प्रिंटफ () अधिकांश प्रोग्रामिंग भाषाओं में किसी भी आउटपुट को प्रारूपित करने के लिए फ़ंक्शन का उपयोग किया जाता है। इस फ़ंक्शन का उपयोग के साथ किया जा सकता है awk विभिन्न प्रकार के स्वरूपित आउटपुट उत्पन्न करने के लिए कमांड। awk कमांड मुख्य रूप से किसी भी टेक्स्ट फ़ाइल के लिए उपयोग किया जाता है। नाम की एक टेक्स्ट फ़ाइल बनाएँ कर्मचारी.txt नीचे दी गई सामग्री के साथ जहां फ़ील्ड को टैब (' ') द्वारा अलग किया जाता है।
कर्मचारी.txt
1001 जॉन सेना 40000
1002 जफर इकबाल 60000
1003 मेहर निगार 30000
1004 जॉनी लीवर 70000
निम्न awk कमांड से डेटा पढ़ेगा कर्मचारी.txt लाइन से लाइन फाइल करें और फॉर्मेटिंग के बाद पहले फाइल को प्रिंट करें। यहां, %10s इसका मतलब है कि आउटपुट 10 कैरेक्टर लंबा होगा। यदि आउटपुट का मान 10 वर्णों से कम है तो मान के सामने रिक्त स्थान जोड़े जाएंगे।
$ awk'{प्रिंटफ'%10sएन', $ 1}'कर्मचारी।टेक्स्ट
आउटपुट:
सफेद जगह पर विभाजित करने के लिए अजीब
किसी भी पाठ को विभाजित करने के लिए डिफ़ॉल्ट शब्द या क्षेत्र विभाजक सफेद स्थान है। awk कमांड टेक्स्ट वैल्यू को विभिन्न तरीकों से इनपुट के रूप में ले सकता है। इनपुट टेक्स्ट से पास किया गया है फेंक दिया निम्नलिखित उदाहरण में आदेश। ये पाठ, ' मुझे प्रोग्रामिंग पसंद है ' डिफ़ॉल्ट विभाजक द्वारा विभाजित किया जाएगा, स्थान , और तीसरा शब्द आउटपुट के रूप में प्रिंट किया जाएगा।
$फेंक दिया 'मुझे प्रोग्रामिंग पसंद है' | awk '{प्रिंट $3}'आउटपुट:
awk सीमांकक बदलने के लिए
awk कमांड का उपयोग किसी भी फ़ाइल सामग्री के लिए सीमांकक को बदलने के लिए किया जा सकता है। मान लीजिए, आपके पास एक टेक्स्ट फ़ाइल है जिसका नाम है फोन.txt निम्नलिखित सामग्री के साथ जहां ':' का उपयोग फ़ाइल सामग्री के क्षेत्र विभाजक के रूप में किया जाता है।
फोन.txt
+123: 334: 889: 778+880: 1855: 456: 907
+9: 7777: 38644: 808
सीमांकक बदलने के लिए निम्न awk कमांड चलाएँ, ':' द्वारा '-' फ़ाइल की सामग्री के लिए, फोन.txt .
$ बिल्ली फोन.txt$ awk '$1=$1' FS=':' OFS='-' phone.txt
आउटपुट:
टैब-सीमांकित डेटा के साथ अजीब
awk कमांड में कई बिल्ट-इन वेरिएबल्स होते हैं जिनका उपयोग टेक्स्ट को विभिन्न तरीकों से पढ़ने के लिए किया जाता है। उनमें से दो हैं एफएस तथा ओएफएस . एफएस इनपुट क्षेत्र विभाजक है और ओएफएस आउटपुट फ़ील्ड विभाजक चर है। इन चरों के उपयोग इस खंड में दिखाए गए हैं। बनाओ टैब नाम से अलग की गई फ़ाइल इनपुट.txt के उपयोग का परीक्षण करने के लिए निम्नलिखित सामग्री के साथ एफएस तथा ओएफएस चर।
इनपुट.txt
क्लाइंट-साइड स्क्रिप्टिंग भाषासर्वर-साइड स्क्रिप्टिंग भाषा
डेटाबेस सर्वर
वेब सर्वर
टैब के साथ FS चर का उपयोग करना
निम्न आदेश प्रत्येक पंक्ति को विभाजित करेगा इनपुट.txt टैब (' ') के आधार पर फ़ाइल करें और प्रत्येक पंक्ति के पहले फ़ील्ड को प्रिंट करें।
$awk '{प्रिंट $1}' एफएस='टी'इनपुट.txtआउटपुट:
टैब के साथ OFS चर का उपयोग करना
निम्न awk कमांड प्रिंट करेगा 9वां तथा 5वां के क्षेत्र 'एलएस-एल' कॉलम शीर्षक को प्रिंट करने के बाद टैब सेपरेटर के साथ कमांड आउटपुट नाम तथा आकार . यहां, ओएफएस एक टैब द्वारा आउटपुट को प्रारूपित करने के लिए चर का उपयोग किया जाता है।
$रास -NS$रास -NS | awk -वी ओएफएस='टी' 'BEGIN { प्रिंटफ '%s %s ', 'नाम', 'आकार'} {प्रिंट $9,$5}'
आउटपुट:
सीएसवी डेटा के साथ अजीब
awk कमांड का उपयोग करके किसी भी CSV फ़ाइल की सामग्री को कई तरह से पार्स किया जा सकता है। नाम की एक CSV फ़ाइल बनाएँ ' ग्राहक.सीएसवी ' निम्नलिखित सामग्री के साथ awk कमांड लागू करने के लिए।
ग्राहक.txt
आईडी, नाम, ईमेल, फोन1, सोफिया, [ईमेल संरक्षित] , (862) 478-7263
2, अमेलिया, [ईमेल संरक्षित] , (530) 764-8000
3, एम्मा, [ईमेल संरक्षित] , (542) 986-2390
CSV फ़ाइल का एकल फ़ील्ड पढ़ना
'-एफ' फ़ाइल की प्रत्येक पंक्ति को विभाजित करने के लिए सीमांकक सेट करने के लिए awk कमांड के साथ विकल्प का उपयोग किया जाता है। निम्न awk कमांड प्रिंट करेगा नाम का क्षेत्र ग्राहक.सीएसवी फ़ाइल।
$बिल्लीग्राहक.सीएसवी$awk -एफ ',' '{प्रिंट $2}'ग्राहक.सीएसवी
आउटपुट:
अन्य पाठ के साथ संयोजन करके कई क्षेत्रों को पढ़ना
निम्न आदेश के तीन क्षेत्रों को प्रिंट करेगा ग्राहक.सीएसवी शीर्षक पाठ को मिलाकर, नाम, ईमेल और फोन . की पहली पंक्ति ग्राहक.सीएसवी फ़ाइल में प्रत्येक फ़ील्ड का शीर्षक होता है। नहीं जब awk कमांड फाइल को पार्स करता है तो वेरिएबल में फाइल का लाइन नंबर होता है। इस उदाहरण में, एन आर ई वेरिएबल का उपयोग फ़ाइल की पहली पंक्ति को छोड़ने के लिए किया जाता है। आउटपुट 2 . दिखाएगारा, ३तृतीयऔर 4वांपहली पंक्ति को छोड़कर सभी पंक्तियों के क्षेत्र।
$awk -एफ ',' 'NR>1 {प्रिंट 'नाम:' $2 ', ईमेल:' $3 ', फ़ोन:' $4}'ग्राहक.सीएसवीआउटपुट:
awk स्क्रिप्ट का उपयोग करके CSV फ़ाइल पढ़ना
awk स्क्रिप्ट को awk फ़ाइल चलाकर निष्पादित किया जा सकता है। आप awk फ़ाइल कैसे बना सकते हैं और फ़ाइल को कैसे चला सकते हैं यह इस उदाहरण में दिखाया गया है। नाम की एक फाइल बनाएं awkcsv.awk निम्नलिखित कोड के साथ। शुरू स्क्रिप्ट में कीवर्ड का उपयोग awk कमांड की स्क्रिप्ट को निष्पादित करने के लिए सूचित करने के लिए किया जाता है शुरू अन्य कार्यों को निष्पादित करने से पहले भाग पहले। यहाँ, क्षेत्र विभाजक ( एफएस ) विभाजन सीमांकक और 2 . को परिभाषित करने के लिए प्रयोग किया जाता हैराऔर 1अनुसूचित जनजातिफ़ील्ड को प्रिंटफ () फ़ंक्शन में उपयोग किए गए प्रारूप के अनुसार मुद्रित किया जाएगा।
awkcsv.awkशुरू{एफएस= ','} { printf '% 5s (% s)एन',$2,$1}
Daud awkcsv.awk की सामग्री के साथ फ़ाइल ग्राहक.सीएसवी निम्न आदेश द्वारा फ़ाइल।
$awk -एफawkcsv.awk customer.csvआउटपुट:
awk रेगेक्स
रेगुलर एक्सप्रेशन एक पैटर्न है जिसका उपयोग टेक्स्ट में किसी भी स्ट्रिंग को खोजने के लिए किया जाता है। विभिन्न प्रकार की जटिल खोज और प्रतिस्थापन कार्यों को नियमित अभिव्यक्ति का उपयोग करके बहुत आसानी से किया जा सकता है। awk कमांड के साथ रेगुलर एक्सप्रेशन के कुछ सरल उपयोग इस खंड में दिखाए गए हैं।
मैचिंग कैरेक्टरसेटनिम्न आदेश शब्द से मेल खाएगा मूर्ख या मूर्ख या ठंडा इनपुट स्ट्रिंग के साथ और यदि शब्द मिला तो प्रिंट करें। यहां, गुड़िया मेल नहीं खाएगा और प्रिंट नहीं करेगा।
$printf 'मूर्खएनठंडाएनगुड़ियाएनबूल' | awk '/ [एफबीसी] ूल/'आउटपुट:
लाइन की शुरुआत में स्ट्रिंग खोज रहे हैं
'^' प्रतीक का उपयोग रेगुलर एक्सप्रेशन में लाइन की शुरुआत में किसी भी पैटर्न को खोजने के लिए किया जाता है। ' लिनक्स' निम्नलिखित उदाहरण में पाठ की प्रत्येक पंक्ति के प्रारंभ में शब्द खोजा जाएगा। यहाँ, दो पंक्तियाँ पाठ से शुरू होती हैं, 'लिनक्स' ' और उन दो पंक्तियों को आउटपुट में दिखाया जाएगा।
$फेंक दिया -और 'लिनक्स उपयोग करने के लिए स्वतंत्र है'एनयह एक ओपन सोर्स सॉफ्टवेयर हैएनLinuxHint हैएक लोकप्रिय ब्लॉग साइट' | awk '/^लिनक्स/'
आउटपुट:
पंक्ति के अंत में स्ट्रिंग खोजना
'$' पाठ की प्रत्येक पंक्ति के अंत में किसी भी पैटर्न को खोजने के लिए नियमित अभिव्यक्ति में प्रतीक का उपयोग किया जाता है। ' लिपि ' शब्द निम्नलिखित उदाहरण में खोजा गया है। यहाँ, दो पंक्तियों में शब्द है, लिपि पंक्ति के अंत में।
$फेंक दिया -और 'PHP स्क्रिप्ट'एनजावास्क्रिप्टएनदृश्य प्रोग्रामिंग' | awk '/ स्क्रिप्ट$/'आउटपुट:
विशेष वर्ण सेट को छोड़ कर खोज रहे हैं
'^' प्रतीक पाठ की शुरुआत को इंगित करता है जब इसका उपयोग किसी स्ट्रिंग पैटर्न के सामने किया जाता है ('/ ^... /') या द्वारा घोषित किसी भी वर्ण सेट से पहले ^ […] . अगर '^' तीसरे ब्रैकेट के अंदर प्रतीक का उपयोग किया जाता है, [^…] तो खोज के समय ब्रैकेट के अंदर निर्धारित परिभाषित वर्ण छोड़ दिया जाएगा। निम्न आदेश किसी भी शब्द को खोजेगा जो शुरू नहीं हो रहा है 'एफ' लेकिन 'के साथ समाप्त ऊल '। ठंडा तथा बूल पैटर्न और टेक्स्ट डेटा के अनुसार प्रिंट किया जाएगा।
$ printf 'मूर्खएनठंडाएनगुड़ियाएनबूल' |awk'/ [^ एफ] ऊल /'आउटपुट:
अजीब मामला असंवेदनशील रेगेक्स
डिफ़ॉल्ट रूप से, स्ट्रिंग में किसी भी पैटर्न को खोजते समय रेगुलर एक्सप्रेशन केस संवेदी खोज करता है। केस असंवेदनशील खोज नियमित अभिव्यक्ति के साथ awk कमांड द्वारा की जा सकती है। निम्नलिखित उदाहरण में, नीचा करना() फ़ंक्शन का उपयोग केस असंवेदनशील खोज करने के लिए किया जाता है। यहां, इनपुट टेक्स्ट की प्रत्येक पंक्ति के पहले शब्द का उपयोग करके लोअर केस में परिवर्तित किया जाएगा नीचा करना() नियमित अभिव्यक्ति पैटर्न के साथ कार्य और मिलान करें। टौपर () इस उद्देश्य के लिए फ़ंक्शन का भी उपयोग किया जा सकता है, इस मामले में, पैटर्न को सभी बड़े अक्षरों द्वारा परिभाषित किया जाना चाहिए। निम्नलिखित उदाहरण में परिभाषित पाठ में खोज शब्द है, 'वेब' ' दो पंक्तियों में जो आउटपुट के रूप में मुद्रित की जाएगी।
$फेंक दिया -और 'वेब डिजाइनएनवेब विकासएनढांचा' | awk 'टोलर($0) ~ /^वेब/;'आउटपुट:
NF (फ़ील्ड की संख्या) चर के साथ awk
एनएफ awk कमांड का एक बिल्ट-इन वेरिएबल है जिसका उपयोग इनपुट टेक्स्ट की प्रत्येक पंक्ति में फ़ील्ड की कुल संख्या को गिनने के लिए किया जाता है। एकाधिक पंक्तियों और एकाधिक शब्दों के साथ कोई भी टेक्स्ट फ़ाइल बनाएं। इनपुट.txt फ़ाइल यहाँ उपयोग की जाती है जो पिछले उदाहरण में बनाई गई है।
कमांड लाइन से NF का उपयोग करना
यहाँ, पहले कमांड का उपयोग की सामग्री को प्रदर्शित करने के लिए किया जाता है इनपुट.txt फ़ाइल और दूसरी कमांड का उपयोग फ़ाइल की प्रत्येक पंक्ति में फ़ील्ड की कुल संख्या को दिखाने के लिए किया जाता है एनएफ चर।
$ बिल्ली इनपुट.txt$ awk '{प्रिंट NF}' input.txt
आउटपुट:
awk फ़ाइल में NF का उपयोग करना
नाम की एक awk फाइल बनाएं गिनती.awk नीचे दी गई स्क्रिप्ट के साथ। जब यह स्क्रिप्ट किसी भी टेक्स्ट डेटा के साथ निष्पादित होगी तो कुल फ़ील्ड वाली प्रत्येक पंक्ति सामग्री आउटपुट के रूप में मुद्रित की जाएगी।
गिनती.awk
{$ . प्रिंट करें0}{प्रिंट'[कुल फ़ील्ड:'एनएफ']'}
निम्न आदेश द्वारा स्क्रिप्ट चलाएँ।
$awk -एफगिनती.awk इनपुट.txtआउटपुट:
awk gensub () फ़ंक्शन
गेटसब () एक प्रतिस्थापन फ़ंक्शन है जिसका उपयोग विशेष सीमांकक या नियमित अभिव्यक्ति पैटर्न के आधार पर स्ट्रिंग को खोजने के लिए किया जाता है। यह फ़ंक्शन परिभाषित किया गया है 'गौक' पैकेज जो डिफ़ॉल्ट रूप से स्थापित नहीं है। इस फ़ंक्शन का सिंटैक्स नीचे दिया गया है। पहले पैरामीटर में नियमित अभिव्यक्ति पैटर्न या खोज सीमांकक होता है, दूसरे पैरामीटर में प्रतिस्थापन टेक्स्ट होता है, तीसरा पैरामीटर इंगित करता है कि खोज कैसे की जाएगी और अंतिम पैरामीटर में वह टेक्स्ट होता है जिसमें यह फ़ंक्शन लागू किया जाएगा।
वाक्य - विन्यास:
जेनसुब(regexp, प्रतिस्थापन, कैसे[, लक्ष्य])स्थापित करने के लिए निम्न आदेश चलाएँ मूर्ख उपयोग के लिए पैकेज गेटसब () awk कमांड के साथ कार्य करें।
$ sudo apt-get gawk स्थापित करेंनाम की एक टेक्स्ट फ़ाइल बनाएँ ' salesinfo.txt ' इस उदाहरण का अभ्यास करने के लिए निम्नलिखित सामग्री के साथ। यहां, फ़ील्ड को एक टैब द्वारा अलग किया जाता है।
salesinfo.txt
मेरा 700000आपका 800000
बुध 750000
200000 . लीजिए
शुक्र 430000
शनि ८२००००
के संख्यात्मक क्षेत्रों को पढ़ने के लिए निम्न आदेश चलाएँ salesinfo.txt फ़ाइल करें और सभी बिक्री राशि का कुल प्रिंट करें। यहां, तीसरा पैरामीटर, 'जी' वैश्विक खोज को इंगित करता है। इसका मतलब है कि पैटर्न फ़ाइल की पूरी सामग्री में खोजा जाएगा।
$awk '{ एक्स = जेनसब (' टी', '', 'जी', $ 2); प्रिंटफ x '+' } END{ प्रिंट 0 }'salesinfo.txt| बीसी -NSआउटपुट:
रैंड () फ़ंक्शन के साथ awk
पंक्ति() फ़ंक्शन का उपयोग 0 से अधिक और 1 से कम किसी भी यादृच्छिक संख्या को उत्पन्न करने के लिए किया जाता है। इसलिए, यह हमेशा 1 से कम एक भिन्नात्मक संख्या उत्पन्न करेगा। निम्न आदेश एक भिन्नात्मक यादृच्छिक संख्या उत्पन्न करेगा और इससे अधिक संख्या प्राप्त करने के लिए मान को 10 से गुणा करेगा। 1. दशमलव बिंदु के बाद दो अंकों वाली एक भिन्नात्मक संख्या प्रिंटफ () फ़ंक्शन को लागू करने के लिए मुद्रित की जाएगी। यदि आप निम्न कमांड को कई बार चलाते हैं तो आपको हर बार अलग आउटपुट मिलेगा।
$awk 'BEGIN {printf' नंबर =%.2f ' है, रैंड ()*10}'आउटपुट:
अजीब उपयोगकर्ता परिभाषित समारोह
पिछले उदाहरणों में उपयोग किए गए सभी फ़ंक्शन अंतर्निहित फ़ंक्शन हैं। लेकिन आप किसी विशेष कार्य को करने के लिए अपनी awk स्क्रिप्ट में उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन घोषित कर सकते हैं। मान लीजिए, आप एक आयत के क्षेत्रफल की गणना करने के लिए एक कस्टम फ़ंक्शन बनाना चाहते हैं। इस काम को करने के लिए 'नाम' नाम की एक फाइल बनाएं। क्षेत्र.awk ' निम्नलिखित लिपि के साथ। इस उदाहरण में, एक उपयोगकर्ता-परिभाषित फ़ंक्शन का नाम है क्षेत्र() स्क्रिप्ट में घोषित किया गया है जो इनपुट पैरामीटर के आधार पर क्षेत्र की गणना करता है और क्षेत्र मान देता है। लाइन में आओ उपयोगकर्ता से इनपुट लेने के लिए यहां कमांड का उपयोग किया जाता है।
क्षेत्र.awk
# क्षेत्र की गणना करेंसमारोहक्षेत्र(ऊंचाई,चौड़ाई){
वापसीऊंचाई*चौड़ाई
}
#निष्पादन शुरू
शुरू{
प्रिंट'ऊंचाई का मान दर्ज करें:'
गेटलाइन हो< '-'
प्रिंट'चौड़ाई का मान दर्ज करें:'
गेटलाइन डब्ल्यू< '-'
प्रिंट'क्षेत्र ='क्षेत्र(एच,में)
}
स्क्रिप्ट चलाएँ।
$awk -एफक्षेत्र.awkआउटपुट:
awk अगर उदाहरण
awk अन्य मानक प्रोग्रामिंग भाषाओं की तरह सशर्त बयानों का समर्थन करता है। इस खंड में तीन उदाहरणों का उपयोग करके तीन प्रकार के if कथन दिखाए गए हैं। नाम की एक टेक्स्ट फ़ाइल बनाएँ आइटम्स.txt निम्नलिखित सामग्री के साथ।
आइटम्स.txt
एचडीडी सैमसंग $100माउस A4Tech
प्रिंटर एचपी $200
सरल अगर उदाहरण :
वह निम्नलिखित आदेश की सामग्री को पढ़ेगा आइटम्स.txt फ़ाइल करें और जांचें 3तृतीय प्रत्येक पंक्ति में फ़ील्ड मान। यदि मान खाली है तो यह लाइन नंबर के साथ एक त्रुटि संदेश प्रिंट करेगा।
$awk '{ अगर ($3 == '') प्रिंट करें 'मूल्य फ़ील्ड लाइन में अनुपलब्ध है' NR }'आइटम्स.txtआउटपुट:
अगर-अन्य उदाहरण:
निम्न आदेश आइटम की कीमत प्रिंट करेगा यदि 3तृतीयफ़ील्ड लाइन में मौजूद है, अन्यथा, यह एक त्रुटि संदेश प्रिंट करेगा।
$ awk'{ अगर ($3 ==') प्रिंट 'कीमत फ़ील्ड गुम है'और प्रिंट करें 'आइटम की कीमत है' $3 }'आइटम।टेक्स्ट
आउटपुट:
अगर-और-अगर उदाहरण:
जब निम्न आदेश टर्मिनल से निष्पादित होगा तो यह उपयोगकर्ता से इनपुट लेगा। इनपुट मान की तुलना तब तक की जाएगी जब तक कि कंडीशन सही न हो जाए। यदि कोई शर्त सत्य हो जाती है तो वह संबंधित ग्रेड को प्रिंट कर देगा। यदि इनपुट मान किसी शर्त से मेल नहीं खाता है तो यह विफल हो जाएगा।
$awk 'BEGIN { प्रिंट 'चिह्न दर्ज करें:'गेटलाइन मार्क<'-'
अगर (चिह्न> = 90) 'ए +' प्रिंट करें
और अगर (चिह्न> = 80) प्रिंट 'ए'
और अगर (चिह्न> = 70) 'बी +' प्रिंट करें
अन्य प्रिंट 'विफल'}'
आउटपुट:
अजीब चर
awk वेरिएबल की घोषणा शेल वेरिएबल की घोषणा के समान है। चर के मान को पढ़ने में अंतर होता है। शेल वेरिएबल के वैल्यू को पढ़ने के लिए वेरिएबल नाम के साथ '$' सिंबल का इस्तेमाल किया जाता है। लेकिन वैल्यू को पढ़ने के लिए awk वेरिएबल के साथ '$' का इस्तेमाल करने की जरूरत नहीं है।
सरल चर का उपयोग करना:
निम्न आदेश नामित एक चर घोषित करेगा 'स्थल' और उस चर को एक स्ट्रिंग मान असाइन किया गया है। वेरिएबल का मान अगले स्टेटमेंट में प्रिंट होता है।
$awk 'BEGIN{ साइट = 'LinuxHint.com'; प्रिंट साइट}'आउटपुट:
किसी फ़ाइल से डेटा पुनर्प्राप्त करने के लिए एक चर का उपयोग करना
निम्न आदेश शब्द की खोज करेगा 'मुद्रक' फ़ाइल में आइटम्स.txt . अगर फ़ाइल की कोई भी लाइन शुरू होती है 'मुद्रक ' तो यह का मान संग्रहीत करेगा 1अनुसूचित जनजाति , 2रा तथा 3तृतीय तीन चर में फ़ील्ड। नाम तथा कीमत चर मुद्रित किया जाएगा।
$ awk'/ प्रिंटर/ { नाम = $ 1; ब्रांड = $ 2; मूल्य = $ 3; प्रिंट 'आइटम का नाम =' नाम;प्रिंट 'आइटम की कीमत =' कीमत}'आइटम।टेक्स्ट
आउटपुट:
अजीब सरणियाँ
संख्यात्मक और संबद्ध सरणियों दोनों का उपयोग awk में किया जा सकता है। awk में ऐरे वेरिएबल डिक्लेरेशन अन्य प्रोग्रामिंग भाषाओं के समान है। इस खंड में सरणियों के कुछ उपयोग दिखाए गए हैं।
सहयोगी सरणी:
सरणी की अनुक्रमणिका सहयोगी सरणी के लिए कोई स्ट्रिंग होगी। इस उदाहरण में, तीन तत्वों की एक सहयोगी सरणी घोषित और मुद्रित की जाती है।
$awk 'शुरू {किताबें ['वेब डिज़ाइन'] = 'एचटीएमएल 5 सीखना';
किताबें ['वेब प्रोग्रामिंग'] = 'PHP और MySQL'
किताबें['PHP फ्रेमवर्क']='लर्निंग लारवेल 5'
प्रिंटफ '%s %s %s ', किताबें['वेब डिजाइन'], किताबें['वेब प्रोग्रामिंग'],
किताबें ['PHP फ्रेमवर्क'] }'
आउटपुट:
संख्यात्मक सरणी:
टैब को अलग करके तीन तत्वों की एक संख्यात्मक सरणी घोषित और मुद्रित की जाती है।
$ awk'शुरू {संख्या [0] = 80;
संख्या [1] = ५५;
संख्या [२] = ७६;
# प्रिंट सरणी तत्व
प्रिंटफ 'सरणी मान: %dटी%डीटी%डीएन', संख्या [0], संख्या [1], संख्या [2]; }'
आउटपुट:
awk लूप
तीन प्रकार के लूप awk द्वारा समर्थित हैं। इन लूपों के उपयोग को यहां तीन उदाहरणों का उपयोग करके दिखाया गया है।
घुमाव के दौरान:
जबकि निम्न कमांड में उपयोग किया जाने वाला लूप 5 बार पुनरावृति करेगा और ब्रेक स्टेटमेंट के लिए लूप से बाहर निकलेगा।
$ awk 'शुरुआत {एन = 1; जबकि (एन 5) ब्रेक; प्रिंट एन; एन++}}'आउटपुट:
पाश के लिए:
निम्न awk कमांड में उपयोग किए जाने वाले लूप के लिए 1 से 10 तक के योग की गणना करेगा और मान को प्रिंट करेगा।
$awk 'शुरुआत { योग = 0; के लिए (एन = 1; एन<= 10; n++) sum=sum+n; print sum }'आउटपुट:
करते-करते लूप:
निम्न आदेश का एक समय-समय पर लूप 10 से 5 तक सभी सम संख्याओं को प्रिंट करेगा।
$awk 'BEGIN {काउंटर = 10; करो { अगर (काउंटर% 2 ==0) प्रिंट काउंटर; काउंटर-- }जबकि (काउंटर> 5)}'
आउटपुट:
पहला कॉलम प्रिंट करने के लिए awk
किसी भी फाइल के पहले कॉलम को awk में $1 वेरिएबल का उपयोग करके प्रिंट किया जा सकता है। लेकिन अगर पहले कॉलम के मान में कई शब्द हैं तो पहले कॉलम का केवल पहला शब्द ही प्रिंट होता है। एक विशिष्ट सीमांकक का उपयोग करके, पहले कॉलम को ठीक से मुद्रित किया जा सकता है। नाम की एक टेक्स्ट फ़ाइल बनाएँ छात्र.txt निम्नलिखित सामग्री के साथ। यहां, पहले कॉलम में दो शब्दों का टेक्स्ट है।
छात्र.txt
Kaniz Fatema 30वांजत्थाअबीर हुसैन 35वांजत्था
जॉन अब्राहम 40वांजत्था
बिना किसी सीमांकक के awk कमांड चलाएँ। पहले कॉलम का पहला भाग प्रिंट होगा।
$awk '{प्रिंट $1}'छात्र.txtनिम्नलिखित सीमांकक के साथ awk कमांड चलाएँ। पहले कॉलम का पूरा भाग प्रिंट होगा।
$awk -एफ '\ एस \ एस' '{प्रिंट $1}'छात्र.txtआउटपुट:
अंतिम कॉलम को प्रिंट करने के लिए awk
$(एनएफ) वेरिएबल का उपयोग किसी भी फाइल के अंतिम कॉलम को प्रिंट करने के लिए किया जा सकता है। निम्नलिखित awk कमांड अंतिम कॉलम के अंतिम भाग और पूर्ण भाग को प्रिंट करेंगे छात्र.txt फ़ाइल।
$awk '{प्रिंट $(एनएफ)}'छात्र.txt$awk -एफ '\ एस \ एस' '{प्रिंट $(एनएफ)}'छात्र.txt
आउटपुट:
awk with grep
किसी भी नियमित अभिव्यक्ति के आधार पर फ़ाइल में सामग्री खोजने के लिए grep लिनक्स का एक और उपयोगी कमांड है। awk और grep दोनों कमांड को एक साथ कैसे इस्तेमाल किया जा सकता है, यह निम्न उदाहरण में दिखाया गया है। पकड़ कर्मचारी आईडी की जानकारी खोजने के लिए कमांड का उपयोग किया जाता है, ' 1002 ' से कर्मचारी.txt फ़ाइल। grep कमांड का आउटपुट इनपुट डेटा के रूप में awk पर भेजा जाएगा। कर्मचारी आईडी के वेतन के आधार पर 5% बोनस गिना और मुद्रित किया जाएगा, ' 1002 ' awk कमांड द्वारा।
$बिल्लीकर्मचारी.txt$पकड़ '1002'कर्मचारी.txt| awk -एफ 'टी' '{प्रिंट $2' मिलेगा $' ($3*5)/100 'बोनस'}'
आउटपुट:
BASH फ़ाइल के साथ awk
अन्य Linux कमांड की तरह, awk कमांड का उपयोग BASH स्क्रिप्ट में भी किया जा सकता है। नाम की एक टेक्स्ट फ़ाइल बनाएँ Customers.txt निम्नलिखित सामग्री के साथ। इस फ़ाइल की प्रत्येक पंक्ति में चार क्षेत्रों की जानकारी होती है। ये ग्राहक की आईडी, नाम, पता और मोबाइल नंबर हैं जिन्हें द्वारा अलग किया जाता है '/ '।
Customers.txt
AL4934 / चार्ल्स एम ब्रूनर / 4838 बीघले स्ट्रीट, हंट्सविले, अलबामा / 256-671-7942CA5455 / वर्जीनिया एस मोटा / 930 बेसल स्ट्रीट, वैलेसिटो, कैलिफ़ोर्निया / 415-679-5908
IL4855 / एन ए नीले / 1932 पैटरसन फोर्क रोड, शिकागो, इलिनोइस / 773-550-5107
नाम की एक बैश फ़ाइल बनाएँ item_search.bash निम्नलिखित स्क्रिप्ट के साथ। इस स्क्रिप्ट के अनुसार स्टेट वैल्यू यूजर से ली जाएगी और उसमें सर्च किया जाएगा Customers.txt फ़ाइल द्वारा पकड़ कमांड और इनपुट के रूप में awk कमांड को पास किया। awk कमांड पढ़ेगा 2रा तथा 4वां प्रत्येक पंक्ति के क्षेत्र। यदि इनपुट मान . के किसी भी राज्य मूल्य से मेल खाता है Customers.txt फ़ाइल तो यह ग्राहक के प्रिंट करेगा नाम तथा मोबाइल नंबर , अन्यथा, यह संदेश प्रिंट करेगा कोई ग्राहक नहीं मिला .
item_search.bash
#!/बिन/बैशफेंक दिया 'राज्य का नाम दर्ज करें:'
पढ़नाराज्य
ग्राहकों=``पकड़ '$राज्य'Customers.txt| awk -एफ '/' '{प्रिंट' ग्राहक का नाम: '$ 2,',
मोबाइल नंबर:'$4}'``
अगर [ '$ग्राहक' !='' ];फिर
फेंक दिया $ग्राहक
अन्यथा
फेंक दिया 'कोई ग्राहक नहीं मिला'
होना
आउटपुट दिखाने के लिए निम्न कमांड चलाएँ।
$बिल्लीCustomers.txt$दे घुमा केitem_search.bash
आउटपुट:
awk साथ sed
Linux का एक अन्य उपयोगी खोज उपकरण है एसईडी . इस कमांड का उपयोग किसी भी फाइल के टेक्स्ट को खोजने और बदलने दोनों के लिए किया जा सकता है। निम्न उदाहरण के साथ awk कमांड के उपयोग को दर्शाता है एसईडी आदेश। यहां, sed कमांड उन सभी कर्मचारियों के नाम खोजेगा, जो 'से शुरू होते हैं' जे ' और इनपुट के रूप में awk कमांड को पास करता है। awk कर्मचारी को प्रिंट करेगा नाम तथा पहचान स्वरूपण के बाद।
$बिल्लीकर्मचारी.txt$एसईडी -एन '/ जे/पी'कर्मचारी.txt| awk -एफ 'टी' '{ प्रिंटफ '%s(%s) ', $2, $1 }'
आउटपुट:
निष्कर्ष:
डेटा को ठीक से फ़िल्टर करने के बाद आप किसी भी सारणीबद्ध या सीमांकित डेटा के आधार पर विभिन्न प्रकार की रिपोर्ट बनाने के लिए awk कमांड का उपयोग कर सकते हैं। आशा है, आप इस ट्यूटोरियल में दिखाए गए उदाहरणों का अभ्यास करने के बाद यह सीख पाएंगे कि awk कमांड कैसे काम करता है।