Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रणाली >> Linux

AWK कमांड और स्क्रिप्ट कैसे लिखें

परिचय

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 कमांड के साथ संयुक्त होते हैं।

  1. लिनक्स में विंडोज पार्टीशन पर लिखने का तरीका लिनक्स में विंडोज पार्टीशन पर लिखने का तरीका

    यदि आप विंडोज और लिनक्स को डुअल-बूट कर रहे हैं, तो आपने देखा होगा कि जब आप लिनक्स से NTFS पार्टीशन माउंट करते हैं, तो कभी-कभी आप उस पर लिख नहीं सकते। आप वहां जो कुछ भी है उसे पढ़ सकते हैं, लेकिन आप फाइलों को डिलीट, रीनेम, संशोधित या नई फाइलें और डायरेक्टरी नहीं लिख सकते। मैं लिनक्स से अपने विंडोज पा

  1. बेसिक क्रोम एक्सटेंशन कैसे लिखें और बनाएं बेसिक क्रोम एक्सटेंशन कैसे लिखें और बनाएं

    क्रोम ग्रह पर सबसे लोकप्रिय वेब ब्राउज़र है। स्टेटकाउंटर के डेस्कटॉप ब्राउज़र मार्केट शेयर सर्वेक्षण के अनुसार, 2017 के अंत तक डेस्कटॉप ब्राउज़रों में क्रोम की 65% बाजार हिस्सेदारी है। उस तरह की बाजार-परिभाषित शक्ति के साथ, क्रोम के लिए डिज़ाइन करना प्राथमिकता बन गया है। यही एक्सटेंशन के लिए भी लाग

  1. iOS 13 पर NFC टैग संचालन में महारत हासिल करें: पढ़ना, लिखना और स्मार्ट टैग का उपयोग करना iOS 13 पर NFC टैग संचालन में महारत हासिल करें: पढ़ना, लिखना और स्मार्ट टैग का उपयोग करना

    स्मार्टफोन के नवीनतम संस्करणों के साथ, NFC वह सुविधा है जो एक फोन से दूसरे फोन में सूचना स्थानांतरित करने में मदद कर सकती है। NFC Near Field Communication का संक्षिप्त नाम है। यह एक वायरलेस कनेक्शन है जिसका उपयोग स्मार्टफोन से जानकारी स्थानांतरित करने और प्राप्त करने के लिए किया जा सकता है। यह सुविध