awk कमांड टेक्स्ट फाइलों को प्रोसेस करने या उनका विश्लेषण करने का एक शक्तिशाली तरीका है। विशेष रूप से, यह डेटा फ़ाइलों का विश्लेषण करता है जो लाइनों (पंक्तियों) और स्तंभों द्वारा व्यवस्थित होते हैं। साधारण awk कमांड को कमांड लाइन से चलाया जा सकता है। अधिक जटिल कार्यों को एक फ़ाइल में awk प्रोग्राम (जिसे awk स्क्रिप्ट कहा जाता है) के रूप में लिखा जाना चाहिए।
AWK मूल बातें
awk कमांड का मूल प्रारूप इस तरह दिखता है:
awk 'पैटर्न {action}' इनपुट-फाइल> आउटपुट-फाइल
इसका अर्थ है:इनपुट फ़ाइल की प्रत्येक पंक्ति लें; यदि रेखा में पैटर्न है, तो क्रिया को रेखा पर लागू करें और परिणामी रेखा को आउटपुट फ़ाइल में लिखें। यदि पैटर्न को छोड़ दिया जाता है, तो क्रिया सभी पंक्तियों पर लागू होती है। उदाहरण के लिए:
awk '{print $5 }' table1.txt> output1.txt
उपरोक्त कथन प्रत्येक पंक्ति के 5वें स्तंभ के तत्व को लेता है और इसे आउटपुट फ़ाइल "output.txt" में एक पंक्ति के रूप में लिखता है। चर '$4' चौथे कॉलम को दर्शाता है। इसी तरह, आप $1, $2, $3, आदि के साथ पहले, दूसरे और तीसरे कॉलम तक पहुंच सकते हैं। डिफ़ॉल्ट रूप से, कॉलम को रिक्त स्थान या टैब (तथाकथित सफेद स्थान) से अलग माना जाता है। इसलिए, यदि इनपुट फ़ाइल "table1.txt" में ये पंक्तियाँ हैं:
1, जस्टिन टिम्बरलेक, शीर्षक 545, मूल्य $7.30
2, टेलर स्विफ्ट, शीर्षक 723, मूल्य $7.90
3, मिक जैगर, शीर्षक 610, मूल्य $7.90
4, लेडी गागा, शीर्षक 118, मूल्य $7.30
5, जॉनी कैश, शीर्षक 482, मूल्य $6.50
6, एल्विस प्रेस्ली, शीर्षक 335, मूल्य $7.30
7, जॉन लेनन, शीर्षक 271, मूल्य $7.90
8, माइकल जैक्सन, शीर्षक 373, कीमत $5.50
तब कमांड आउटपुट फ़ाइल "output1.txt" में निम्न पंक्तियाँ लिखेगा:
545,
723,
610,
118,
482,
335,
271,
373,
यदि कॉलम सेपरेटर रिक्त स्थान या टैब के अलावा कुछ और है, जैसे अल्पविराम, तो आप इसे awk स्टेटमेंट में निम्नानुसार निर्दिष्ट कर सकते हैं:
awk -F, '{print $3 }' table1.txt> output1.txtयह प्रत्येक पंक्ति के कॉलम 3 से तत्व का चयन करेगा यदि कॉलम को अल्पविराम से अलग माना जाता है। इसलिए इस मामले में आउटपुट होगा:
शीर्षक 545
शीर्षक 723
शीर्षक 610
शीर्षक 118
शीर्षक 482
शीर्षक 335
शीर्षक 271
शीर्षक 373
AWK में सशर्त अभिव्यक्तियाँ
कर्ली ब्रैकेट्स ('{','}') के अंदर स्टेटमेंट्स की लिस्ट को ब्लॉक कहा जाता है। अगर आप किसी ब्लॉक के सामने कंडीशनल एक्सप्रेशन रखते हैं, तो ब्लॉक के अंदर का स्टेटमेंट तभी निष्पादित होगा जब कंडीशन सही होगी।
awk '$7=="\$7.30" { प्रिंट $3 }' table1.txtइस मामले में, शर्त $7=="\$7.30" है, जिसका अर्थ है कि कॉलम 7 में तत्व $7.30 के बराबर है। डॉलर चिह्न के सामने बैकस्लैश का उपयोग सिस्टम को $7 को एक चर के रूप में व्याख्या करने से रोकने के लिए किया जाता है और इसके बजाय डॉलर चिह्न को शाब्दिक रूप से लिया जाता है।
तो यह awk स्टेटमेंट प्रत्येक पंक्ति के तीसरे कॉलम में तत्व को प्रिंट करता है जिसमें कॉलम 7 में "$7.30" है।
आप शर्त के रूप में नियमित अभिव्यक्तियों का भी उपयोग कर सकते हैं। उदाहरण के लिए:
awk '/30/ {प्रिंट $3}' table1.txtदो स्लैश ('/') के बीच की स्ट्रिंग रेगुलर एक्सप्रेशन है। इस मामले में, यह केवल "30" स्ट्रिंग है। इसका मतलब है कि यदि किसी पंक्ति में "30" स्ट्रिंग है, तो सिस्टम उस पंक्ति के तीसरे कॉलम में तत्व को प्रिंट करता है। उपरोक्त उदाहरण में आउटपुट होगा:
टिम्बरलेक,
गागा,
प्रेस्ली,AWK में परिकलन करें
यदि तालिका तत्व संख्याएं हैं, तो awk इस उदाहरण के अनुसार उन पर गणना चला सकते हैं:
awk '{ प्रिंट ($2 * $3) + $7}'वर्तमान पंक्ति ($1, $2, आदि) के तत्वों तक पहुँचने वाले चरों के अलावा, चर $0 है जो पूर्ण पंक्ति (लाइन) को संदर्भित करता है, और चर NF जो फ़ील्ड की संख्या को धारण करता है।
आप इस उदाहरण में नए चर भी परिभाषित कर सकते हैं:
awk '{ sum=0; के लिए (col=1; col<=NF; col++) योग +=$col; प्रिंट राशि; }'यह प्रत्येक पंक्ति के सभी तत्वों के योग की गणना और प्रिंट करता है।
awk स्टेटमेंट को अक्सर sed कमांड के साथ जोड़ा जाता है।