awk, sed, और grep Linux या UNIX कमांड लाइन में मेरे तीन पसंदीदा उपकरण हैं। वे सभी काफी शक्तिशाली हैं। आज हम देखेंगे कि इसका उपयोग करने में आसानी के लिए awk के साथ क्रैकिंग कैसे करें। फिर हम आपके लिए चीजों को थोड़ा और मजेदार बनाने के लिए कुछ उपयोगी awk one लाइनर देखेंगे।
AWK एक प्रोग्रामिंग भाषा है जिसे टेक्स्ट-आधारित डेटा को या तो फ़ाइलों या डेटा स्ट्रीम में संसाधित करने के लिए डिज़ाइन किया गया है। इसे 1970 के दशक में बेल लैब्स में बनाया गया था। हालांकि यह काफी पुराना है, लेकिन इसकी उम्र से मूर्ख मत बनो। यह जो करता है उसमें अत्यंत शक्तिशाली और कुशल है। चलो अब अपने हाथ गंदे करते हैं।
इससे पहले कि हम जटिल कार्यप्रणाली और awk के उपयोग में तल्लीन हों, आइए आपको इसकी मूल बातें शुरू करते हैं। हम इस अभ्यास के लिए एक डमी फ़ाइल बनाएंगे और उसका उपयोग करेंगे। आप किसी भी टेक्स्ट फ़ाइल का उपयोग कर सकते हैं, जैसे कि आपके सिस्टम से लॉग। मैं अपने पसंदीदा सिस्टम मॉनिटरिंग टूल में से एक से एक नमूना आउटपुट का उपयोग करूंगा - Dstat. यह रहा आउटपुट:
बड़ा करने के लिए क्लिक करें
यह awk को संभालने के लिए एक आदर्श आउटपुट है। awk अल्पविराम या टैब से अलग की गई सामग्री के साथ बहुत अच्छा है। आप देखेंगे कि जल्द ही क्यों। तो या तो कुछ समान डेटा बनाएं या उपरोक्त मेरे उदाहरण को एक डमी फ़ाइल में कॉपी और पेस्ट करें जिसे test.txt जैसा कुछ कहा जाता है। अपने Linux कंप्यूटर पर एक टर्मिनल विंडो लॉन्च करें। लिनक्स के लगभग सभी फ्लेवर awk के साथ शिप करते हैं। यदि आपको कोई ऐसा मिल गया है जिसके पास किसी कारण से यह नहीं है तो कृपया इसे स्थापित करें। टर्मिनल विंडो पर उस निर्देशिका से निम्नलिखित टाइप करें जहाँ आपने test.txt फ़ाइल संग्रहीत की है -
# awk {'प्रिंट'} test.txt
आउटपुट में टेक्स्ट फ़ाइल की संपूर्ण सामग्री होनी चाहिए। इसमें क्या मजा है।
अब देखते हैं कि आप किसी कॉलम को कैसे चुन सकते हैं और उसे कैसे प्रिंट कर सकते हैं। निम्न आदेश निष्पादित करें:
# awk {'प्रिंट $1'} test.txt
अब हम awk को टेक्स्ट फ़ाइल के पहले कॉलम को प्रिंट करने के लिए कह रहे हैं। यह स्वचालित रूप से पता लगाएगा कि फ़ाइल एक टैब से अलग की गई है और सामग्री के केवल पहले कॉलम को प्रिंट करती है। आपको आउटपुट में कुछ इस तरह दिखना चाहिए:
—-कुल-सीपीयू-उपयोग—-
usr
5
13
8
0
1
1
1
0
1
1
आप अपनी पसंद के किसी भी कॉलम के लिए ऐसा ही कर सकते हैं। यदि आप ऊपर दिखाए गए कमांड के ऊपर तीसरे कॉलम चेंज कमांड को प्रिंट करना चाहते हैं:
# awk {'प्रिंट $3'} test.txt
आप कई कॉलमों को awk प्रिंट भी कर सकते हैं। इसलिए यदि आप चाहते हैं कि पहला, तीसरा और सातवां कॉलम छपा हो तो उन्हें कॉमा से अलग किए गए कमांड में जोड़ें।
# awk {'प्रिंट $1, $3, $7′} test.txt
आपके लिए चाल चलेगा:
—-total-cpu-usage—- -net/total-
usr idl पढ़ें
5 93 154k
13 87 0
8 92 0
0 99 0
1 97 0
1 98 0
1 99 0
0 99 0
1 99 0
1 100 0
यदि आपके पास /etc/पासवर्ड फ़ाइल जैसी कोई पेचीदा फ़ाइल है, जहां डेटा को कोलन द्वारा अलग किया जाता है, न कि रिक्त स्थान या टैब, तो awk उसे स्वचालित रूप से नहीं उठाता है। ऐसे मामलों में आप awk को सही सेपरेटर से फीड कर सकते हैं। फ़ाइल के दूसरे कॉलम को प्रिंट करने के लिए इस तरह कमांड का उपयोग करें:
# awk -F':' {'प्रिंट $1'} /etc/passwd
यह आदेश आपको आपके सिस्टम के सभी उपयोक्ताओं के उपयोक्तानामों का आउटपुट देगा:
सेब
आम
केला
तरबूज
कीवी
संतरा
आप किसी अन्य प्रकार के विभाजकों के साथ भी ऐसा ही कर सकते हैं। आप अपनी लॉग फ़ाइलों को पार्स करने के लिए awk का भी उपयोग कर सकते हैं। उदाहरण के लिए, यदि आप अपने वेब सर्वर पर एक्सेस किए गए सभी आईपी पते और संबंधित वेब यूआरएल देखना चाहते हैं तो आप यह जानकारी प्राप्त करने के लिए अपने वेब सर्वर के एक्सेस लॉग को पार्स करने के लिए awk का उपयोग कर सकते हैं। निम्न आदेश का प्रयोग करें:
# awk '$9 ==200 { प्रिंट $1, $7}' access.log
199.63.142.250 /2008/10/my-5-पसंदीदा-हैंगआउट/
220.180.94.221 /2009/02/queious-a-mysql-client-for-the-mac/
67.190.114.46 / 2009/05/
173.234.43.110 /2009/01/साइकिल-रेंटल/
173.234.38.110 /wp-comments-post.php
इस तरह पार्सिंग का उपयोग करके आप यह पता लगा सकते हैं कि कोई आपकी वेबसाइट पर बहुत अधिक आ रहा है, क्योंकि वे जानकारी चुरा रहे हैं। आप इस जानकारी को क्रमबद्ध भी कर सकते हैं। मान लें कि आप जानना चाहते हैं कि कोई विशेष IP पता आपकी वेबसाइट पर कितनी बार आया है
# awk '$9 ==200 {प्रिंट $1}' access.log | सॉर्ट | यूनिक-सी | सॉर्ट -एनआर
46 122.248.161.1
35 122.248.161.2
26 65.202.21.10
24 67.195.111.46
19 144.36.231.111
18 59.183.121.71