एडब्ल्यूके कमांड और स्क्रिप्ट्स कैसे लिखें

आदेश, वाक्यविन्यास, और उदाहरण

Awk कमांड टेक्स्ट फ़ाइलों को प्रोसेस करने या विश्लेषण करने के लिए एक शक्तिशाली तरीका है - विशेष रूप से, लाइन फ़ाइलों (पंक्तियों) और स्तंभों द्वारा व्यवस्थित डेटा फ़ाइलों।

सरल awk कमांड कमांड लाइन से चलाया जा सकता है। अधिक जटिल कार्यों को एक फ़ाइल में अजीब प्रोग्राम (तथाकथित अजीब स्क्रिप्ट) के रूप में लिखा जाना चाहिए।

एक अजीब कमांड का मूल प्रारूप इस तरह दिखता है:

awk 'pattern {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 -F, '{print $ 3}' table1.txt> output1.txt

कॉलम को अल्पविराम से अलग करने के लिए माना जाता है, तो यह प्रत्येक पंक्ति के कॉलम 3 से तत्व का चयन करेगा। इसलिए आउटपुट, इस मामले में, होगा:

शीर्षक 545 शीर्षक 723 शीर्षक 610 शीर्षक 118 शीर्षक 482 शीर्षक 335 शीर्षक 271 शीर्षक 373

घुंघराले ब्रैकेट्स ('{', '}') के अंदर बयानों की सूची को ब्लॉक कहा जाता है। यदि आप किसी ब्लॉक के सामने एक सशर्त अभिव्यक्ति डालते हैं, तो ब्लॉक के अंदर का बयान केवल तभी निष्पादित किया जाएगा जब स्थिति सत्य हो।

अजीब '$ 7 == "\ $ 7.30" {प्रिंट $ 3}' table1.txt

इस मामले में, स्थिति $ 7 == "\ $ 7.30" है, जिसका अर्थ है कि कॉलम 7 पर तत्व $ 7.30 के बराबर है। डॉलर के चिह्न के सामने बैकस्लैश का उपयोग प्रणाली को एक चर के रूप में $ 7 की व्याख्या करने से रोकने के लिए किया जाता है और इसके बजाय डॉलर का चिह्न सचमुच लेता है।

तो यह अजीब कथन प्रत्येक पंक्ति के तीसरे कॉलम पर तत्व को प्रिंट करता है जिसमें कॉलम 7 पर "$ 7.30" है।

आप नियमित अभिव्यक्तियों को स्थिति के रूप में भी उपयोग कर सकते हैं। उदाहरण के लिए:

अजीब '/ 30 / {प्रिंट $ 3}' table1.txt

दो स्लेश ('/') के बीच की स्ट्रिंग नियमित अभिव्यक्ति है। इस मामले में, यह सिर्फ "30." स्ट्रिंग है। इसका अर्थ यह है कि यदि किसी पंक्ति में स्ट्रिंग "30" है, तो सिस्टम उस पंक्ति के तीसरे कॉलम पर तत्व को प्रिंट करता है। उपर्युक्त उदाहरण में आउटपुट होगा:

टिम्बरलेक, गागा, प्रेस्ली,

यदि टेबल तत्व संख्याएं हैं तो इस उदाहरण में उनके बारे में गणना चल सकती है:

अजीब '{प्रिंट ($ 2 * $ 3) + $ 7}'

वर्तमान पंक्ति ($ 1, $ 2, आदि) के तत्वों तक पहुंचने वाले वेरिएबल्स के अलावा वैरिएबल $ 0 है जो पूर्ण पंक्ति (रेखा), और वेरिएबल एनएफ को संदर्भित करता है जो फ़ील्ड की संख्या को रखता है।

आप इस उदाहरण में नए चर को भी परिभाषित कर सकते हैं:

awk '{sum = 0; के लिए (col = 1; col <= NF; col ++) sum + = $ col; प्रिंट योग; } '

यह प्रत्येक पंक्ति के सभी तत्वों के योग की गणना और प्रिंट करता है।

Awk कथन अक्सर sed आदेश के साथ संयुक्त होते हैं।