AWK कमांडस आणि लिपी लिहा

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

Awk आदेश मजकूर फाइल्सचे विश्लेषण किंवा विश्लेषण करण्यासाठी एक शक्तिशाली पद्धत आहे-विशेषतः, डेटा (पंक्ति) आणि स्तंभांनी आयोजित केलेल्या डेटा फायली.

Simple awk कमांड ला कमांड लाईनवरून चालता येतात. अधिक जटिल कार्ये फाईलमध्ये अवाक् प्रोग्राम्स (तथाकथित ए्वॅक स्क्रिप्ट) म्हणून लिहीली पाहिजेत.

एक awk आदेशचे मूल रूप असे दिसते:

awk 'pattern {action}' input-file> आउटपुट फाइल

याचा अर्थ: इनपुट फाइलच्या प्रत्येक ओळी घ्या; जर ओळीमध्ये नमुना असेल तर क्रिया लाईनवर लागू करा आणि परिणामस्वरूप ओळ आउटपुट फाइलवर लिहा. नमुना वगळल्यास, कृती सर्व ओळीवर लागू केली जाते. उदाहरणार्थ:

awk '{print $ 5}' table1.txt> output1.txt

हे विधान प्रत्येक ओळीच्या पाचव्या स्तंभाचा घटक घेते आणि त्यास आउटपुट फाइल "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

नंतर command आउटपुट फाइल "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

कर्ली ब्रॅकेट्स ('{', '}') मधील स्टेटमेन्टची सूची ब्लॉक म्हटले जाते. जर तुम्ही ब्लॉकच्या समोर एक सशर्त एक्सपेंशन ठेवले तर ब्लॉकमध्ये असलेले स्टेटमेंट केवळ तेव्हाच कार्यान्वित होईल जेव्हा कंडिशन true असेल.

awk '$ 7 == "\ $ 7.30" {print $ 3}' table1.txt

या प्रकरणात, अट $ 7 आहे == "\ $ 7.30", याचा अर्थ असा की स्तंभ 7 मधील घटक $ 7.30 च्या समान आहे. डॉलर चिन्हाच्या विरुध्द बॅकस्लॅशचा वापर सिस्टमला $ 7 ला व्हेरिएबल म्हणून समजण्यापासून रोखण्यासाठी वापरले जाते आणि त्याऐवजी डॉलर चिन्ह अक्षरशः घेतो.

तर हे अॅक स्टेटमेंट प्रत्येक ओळीच्या तिस-या स्तंभात घटक दर्शवितो ज्याच्या स्तंभ 7 वर "$ 7.30" आहे.

आपण अटी म्हणून नियमित अभिव्यक्ती देखील वापरू शकता. उदाहरणार्थ:

awk '/ 30 / {print $ 3}' table1.txt

दोन स्लॅश ('/') मधील स्ट्रिंग म्हणजे रेग्युलर एक्स्प्रेशन. या प्रकरणात, ती फक्त "30" आहे. याचा अर्थ जर एका ओळीत "30" स्ट्रिंग आहे, तर सिस्टम त्या ओळीच्या तिसऱ्या स्तंभात घटक दर्शवितो. वरील उदाहरणातील आऊटपुट खालीलप्रमाणे असेल:

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

सारणीतील घटक हे संख्या असल्यास अ.ज.वि. या उदाहरणावरून त्यांच्यावरील गणिते चालवू शकतात:

awk '{print ($ 2 * $ 3) + $ 7}'

चालू पंक्ती ($ 1, $ 2, इत्यादी) च्या घटकांमध्ये प्रवेश करणार्या व्हेरिएबल्सच्या व्यतिरिक्त $ 0 ही व्हेरिएबल्स पूर्ण रो (रेषेस) आणि व्हेरिएबल एनएफ जे क्षेत्रांची संख्या धारण करते.

या उदाहरणात आपण नवीन व्हेरिएबल्स देखील परिभाषित करू शकता:

awk '{sum = 0; साठी (col = 1; col <= NF; col ++) sum + = $ col; प्रिंट बेरीज; } '

हे प्रत्येक ओळीच्या सर्व घटकांच्या बेरजेची गणना करते आणि छापते.

वाक्यांचे स्टेटमेंट वारंवार sed आज्ञा सह एकत्र केले जातात.