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