awk, sed, और grep लिनक्स या यूनिक्स कमांड लाइन में मेरे तीन पसंदीदा टूल हैं। वे सभी काफी शक्तिशाली हैं। आज हम देखेंगे कि awk के साथ कैसे शुरुआत करें ताकि आप इसे उपयोग करने में सहज हो सकें। फिर हम कुछ उपयोगी awk वन-लाइनर्स देखेंगे ताकि चीजें आपके लिए थोड़ी अधिक मजेदार बनें।
AWK टेक्स्ट-आधारित डेटा को प्रोसेस करने के लिए डिज़ाइन की गई एक प्रोग्रामिंग भाषा है, चाहे फाइलों में हो या डेटा स्ट्रीम में। इसे 1970 के दशक में बेल लैब्स में बनाया गया था। हालांकि यह काफी पुराना है, इसकी उम्र से मूर्ख मत बनो। यह जो करता है उसमें अत्यंत शक्तिशाली और कुशल है। चलिए अब अपने हाथ गंदे करते हैं।
इससे पहले कि हम awk के जटिल कामकाज और उपयोग में तल्लीन हों, आइए आपको इसकी मूल बातों पर शुरू करते हैं। हम इस अभ्यास के लिए एक डमी फाइल बनाएंगे और उपयोग करेंगे। आप लगभग किसी भी टेक्स्ट फाइल का उपयोग कर सकते हैं, जैसे आपके सिस्टम से एक लॉग। मैं अपने पसंदीदा सिस्टम मॉनिटरिंग टूल्स में से एक — Dstat के नमूना आउटपुट का उपयोग करूंगा। यहां आउटपुट है:

बड़ा करने के लिए क्लिक करें
यह awk को संभालने के लिए एक आदर्श आउटपुट है। awk कॉमा या टैब सेपरेटेड कंटेंट के साथ बहुत अच्छा है। आप जल्द ही देखेंगे कि क्यों। तो या तो कुछ समान डेटा बनाएं या ऊपर दिए गए मेरे उदाहरण को कॉपी करके test.txt नामक एक डमी फाइल में पेस्ट करें। अपने लिनक्स कंप्यूटर पर एक टर्मिनल विंडो लॉन्च करें। लिनक्स के लगभग सभी फ्लेवर awk के साथ आते हैं। यदि आपने किसी कारण से एक ऐसा पाया जिसमें यह नहीं है तो कृपया इसे इंस्टॉल करें। टर्मिनल विंडो पर उस डायरेक्टरी से जहां आपने test.txt फाइल स्टोर की है निम्न टाइप करें —
# awk {'print'} test.txt
आउटपुट में टेक्स्ट फाइल की पूरी सामग्री होनी चाहिए। इसमें क्या मजा है।
अब देखते हैं कि आप एक कॉलम कैसे चुन सकते हैं और केवल उसी को प्रिंट कर सकते हैं। निम्न कमांड निष्पादित करें:
# awk {'print $1'} test.txt
अब हम awk से टेक्स्ट फाइल का केवल पहला कॉलम प्रिंट करने के लिए कह रहे हैं। यह स्वचालित रूप से पता लगा लेगा कि फाइल टैब-सेपरेटेड है और सामग्री का केवल पहला कॉलम प्रिंट करेगा। आपको आउटपुट में कुछ ऐसा देखना चाहिए:
—-total-cpu-usage—-
usr
5
13
8
0
1
1
1
0
1
1
आप किसी भी कॉलम के लिए ऐसा ही कर सकते हैं। यदि आप awk को तीसरा कॉलम प्रिंट करना चाहते हैं तो ऊपर दिखाए गए कमांड को बदलें:
# awk {'print $3'} test.txt
आप awk को एकाधिक कॉलम प्रिंट करने के लिए भी कह सकते हैं। इसलिए यदि आप पहला, तीसरा, और सातवां कॉलम प्रिंट करना चाहते हैं तो उन्हें कमांड में कॉमा से अलग करके जोड़ें।
# awk {'print $1, $3, $7'} test.txt
आपके लिए काम करेगा:
—-total-cpu-usage—- -net/total-
usr idl read
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/password जैसी एक ट्रिकियर फाइल है जहां डेटा स्पेस या टैब के बजाय कोलन से अलग किया जाता है, तो awk इसे स्वचालित रूप से नहीं पकड़ता है। ऐसे मामलों में आप awk को सही सेपरेटर दे सकते हैं। फाइल का दूसरा कॉलम प्रिंट करने के लिए इस तरह की कमांड उपयोग करें:
# awk -F':' {'print $1'} /etc/passwd
यह कमांड आपको आपके सिस्टम पर सभी यूजर्स के यूजरनेम का आउटपुट देगा:
apple
mango
banana
watermelon
kiwi
orange
आप किसी अन्य प्रकार के सेपरेटर्स के साथ भी ऐसा ही कर सकते हैं। आप अपने लॉग फाइलों को पार्स करने के लिए awk का उपयोग भी कर सकते हैं। उदाहरण के लिए, यदि आप सभी IP एड्रेस और संबंधित वेब URL देखना चाहते हैं जो आपके वेब सर्वर पर एक्सेस किए गए हैं तो आप awk का उपयोग अपने वेब सर्वर के एक्सेस लॉग को पार्स करके यह जानकारी प्राप्त करने के लिए कर सकते हैं। निम्न कमांड उपयोग करें:
# awk '$9 == 200 { print $1, $7}' access.log
199.63.142.250 /2008/10/my-5-favourite-hangouts/
220.180.94.221 /2009/02/querious-a-mysql-client-for-the-mac/
67.190.114.46 /2009/05/
173.234.43.110 /2009/01/bicycle-rental/
173.234.38.110 /wp-comments-post.php
इस तरह पार्सिंग का उपयोग करके आप पता लगा सकते हैं कि कोई आपकी वेबसाइट पर बहुत बार विजिट कर रहा है, क्योंकि वे जानकारी चुरा रहे हो सकते हैं। आप इस जानकारी को सॉर्ट भी कर सकते हैं। मान लीजिए आप जानना चाहते हैं कि कोई विशेष IP एड्रेस आपकी वेबसाइट पर कितनी बार आया
# awk '$9 == 200 { print $1}' access.log | sort | uniq -c | sort -nr
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