यह मार्गदर्शिका आपको लिनक्स में awk कमांड का उपयोग करने का तरीका दिखाती है, जिसमें बहुत सारे उपयोगी रोज़मर्रा के उदाहरण हैं।
AWK Linux ऑपरेटिंग सिस्टम के लिए उपलब्ध टेक्स्ट को खोजने और उसमें हेरफेर करने के लिए एक टूल और भाषा है।
अजीब पैटर्न . द्वारा परिभाषित पाठ के लिए कमांड और संबंधित स्क्रिप्टिंग भाषा खोज फ़ाइलें और एक विशिष्ट कार्रवाई करें पैटर्न से मेल खाने वाले टेक्स्ट पर।
अजीब बड़ी टेक्स्ट फ़ाइलों या बड़ी संख्या में टेक्स्ट फ़ाइलों से डेटा निकालने और रिपोर्ट बनाने के लिए एक उपयोगी उपकरण है - उदाहरण के लिए प्रसंस्करण लॉग, या तापमान जांच जैसे डेटा-रिकॉर्डिंग उपकरणों का आउटपुट, जिन्होंने समय की अवधि में बहुत अधिक डेटा एकत्र किया है . इसका उपयोग डेटाबेस प्रश्नों के आउटपुट पर भी किया जा सकता है।
awk; इंस्टॉल करने की कोई आवश्यकता नहीं है; यह आपके Linux सिस्टम पर पहले से ही उपलब्ध होना चाहिए।
अजीब सिंटैक्स
awk . का उपयोग करने का सिंटैक्स टर्मिनल में कमांड इस प्रकार है:
awk [PROGRAM] [INPUT FILES]
ध्यान दें कि:
- [PROGRAM] खोज पैटर्न और की जाने वाली कार्रवाइयां हैं - यह वह प्रोग्राम है जिसे आप आपूर्ति की गई फ़ाइलों पर चलाना चाहते हैं
- इसे -f का उपयोग करके इनलाइन के बजाय टेक्स्ट फ़ाइल के रूप में भी दिया जा सकता है विकल्प
- [INPUT FILES] वे फाइलें हैं जिन पर आप काम करना चाहते हैं - यह एक स्पेस से अलग की गई कई फाइलें हो सकती हैं, या एक निर्देशिका का पथ, या मिलान करने के लिए फाइलों का एक पैटर्न हो सकता है
- यदि कोई इनपुट फ़ाइल निर्दिष्ट नहीं है, तो awk किसी अन्य कमांड से पाइप किए गए आउटपुट पर काम करेगा
अजीब विकल्प
निम्नलिखित विकल्प awk कमांड को दिए जा सकते हैं:
-f प्रोग्राम-फाइल | प्रोग्राम टेक्स्ट को कमांड लाइन के बजाय फाइल से पढ़ा जाता है। एकाधिक -f विकल्प स्वीकार किए जाते हैं। |
-F मान | फ़ील्ड विभाजक, FS, को मान पर सेट करता है। |
-v var=value | प्रोग्राम वेरिएबल var को मान असाइन करता है। |
awk के अपने संस्करण के लिए अधिक कार्यान्वयन-विशिष्ट विकल्पों के लिए, आप मैन्युअल को चलाकर देख सकते हैं:
man awk
कार्यक्रम क्रियाएँ और चर
आप जिस प्रोग्राम की आपूर्ति करते हैं awk यह निर्धारित करेगा कि यह आपके द्वारा आपूर्ति की जाने वाली टेक्स्ट फ़ाइलों के साथ क्या करता है। एक awk प्रोग्राम निम्न स्वरूप लेता है:
CONDITION { ACTION } CONDITION { ACTION } ...
जहां शर्त मेल खाने वाले टेक्स्ट का पैटर्न है और कार्रवाई मिलान किए गए पाठ पर कार्रवाई करने के लिए है। आप जितनी चाहें उतनी शर्तें और कार्रवाइयां कर सकते हैं।
कार्रवाइयां
आपूर्ति की गई क्रियाएं कमांड हैं जिनमें गणना, चर और कॉलिंग फ़ंक्शन शामिल हो सकते हैं। कुछ अंतर्निहित कार्य कार्यान्वयन-विशिष्ट हैं, इसलिए इनके लिए अपने मैनुअल की जांच करना सबसे अच्छा है।
रिकॉर्ड
अजीब आम तौर पर टेक्स्ट फ़ाइल की प्रत्येक नई पंक्ति को एक रिकॉर्ड . के रूप में मानता है जब तक अन्यथा विकल्प . द्वारा निर्दिष्ट न किया गया हो ।
फ़ील्ड
अजीब फ़ील्ड . को दर्शाने के लिए व्हाइटस्पेस (रिक्त स्थान, टैब) का उपयोग करेगा एक रिकॉर्ड . में जब तक अन्यथा विकल्प . द्वारा निर्दिष्ट न किया गया हो ।
चर
अजीब कई अंतर्निहित चर हैं जिनका उपयोग आप स्वयं परिभाषित किए बिना कर सकते हैं, जो कुछ सामान्य परिदृश्यों को कवर करते हैं:
परिवर्तनीय | <थ>अर्थ|
---|---|
$0 | संपूर्ण रिकॉर्ड का प्रतिनिधित्व करता है |
$1, $2, $3 … | फ़ील्ड वैरिएबल - अलग-अलग टेक्स्ट फ़ील्ड के टेक्स्ट/मानों को रिकॉर्ड में रखें |
NR / N umber of R रिकॉर्ड्स | सभी फाइलों से अब तक पढ़े गए इनपुट रिकॉर्ड की संख्या की वर्तमान गणना |
FNR / F ile N umber of R रिकॉर्ड्स | वर्तमान फ़ाइल में अब तक पढ़े गए इनपुट रिकॉर्ड की संख्या की वर्तमान गणना - हर बार एक नई फ़ाइल शुरू होने पर स्वचालित रूप से शून्य पर रीसेट करें |
NF / N umber of F पैदावार | वर्तमान इनपुट रिकॉर्ड में फ़ील्ड की संख्या - किसी रिकॉर्ड में अंतिम फ़ील्ड को $NF का उपयोग करके संदर्भित किया जा सकता है, दूसरा से अंतिम फ़ील्ड $(NF-1) और इसी तरह का उपयोग करके |
FILENAME | वर्तमान इनपुट फ़ाइल का नाम |
FS / F ield S बाष्पीकरण करनेवाला | एक रिकॉर्ड में फ़ील्ड को अलग करने के लिए उपयोग किया जाने वाला वर्ण। डिफ़ॉल्ट रूप से कोई भी स्थान और टैब वर्ण शामिल होते हैं |
रुपये / आर एकॉर्ड एस बाष्पीकरण करनेवाला | एक फाइल में रिकॉर्ड्स को अलग करने के लिए इस्तेमाल किया जाने वाला कैरेक्टर। डिफ़ॉल्ट रूप से नई पंक्ति |
ओएफएस / ओ आउटपुट F ield S बाष्पीकरण करनेवाला | Awk आउटपुट में फ़ील्ड को अलग करने के लिए उपयोग किए जाने वाले कैरेक्टर। डिफ़ॉल्ट एक एकल स्थान है |
ORS / O आउटपुट आर एकॉर्ड एस बाष्पीकरण करनेवाला | Awk आउटपुट में फ़ील्ड को अलग करने के लिए उपयोग किए जाने वाले कैरेक्टर। डिफ़ॉल्ट एक नई लाइन है |
OFMT / O आउटपुट F याएम एटी | संख्यात्मक आउटपुट के लिए प्रारूप - डिफ़ॉल्ट प्रारूप “%.6g” . है |
अजीब उपयोग उदाहरण
इन उदाहरणों के लिए, हम एक टेक्स्ट फ़ाइल पर काम करेंगे, जिसका नाम है flowers.txt , जिसमें निम्नलिखित पाठ है:
red rose yellow daffodil pink flamingo white rose blue iris white lily red peony yellow orchid purple foxglove
फ़ाइल सामग्री प्रिंट करें
निम्न awk कमांड awk प्रिंट का उपयोग करके किसी फ़ाइल की सामग्री को टर्मिनल पर आउटपुट करेगा समारोह:
awk '{print}' flowers.txt
फ़ाइल में रिकॉर्ड की संख्या (लाइनें) प्रिंट करें
awk 'END { print NR }' sample.txt
यह उदाहरण फ़ाइल में पंक्तियों की संख्या को आउटपुट करेगा:
9
रेगुलर एक्सप्रेशन का उपयोग करके फ़ाइल में टेक्स्ट खोजें
निम्न आदेश केवल गुलाब . के प्रकारों का वर्णन करने वाली फ़ाइल में पंक्तियों को आउटपुट करेगा :
awk '/rose/' flowers.txt
ध्यान दें कि REGEX (रेगुलर एक्सप्रेशन) सिंटैक्स का उपयोग खोज के लिए टेक्स्ट को परिभाषित करने के लिए किया जाता है।
यह कमांड आउटपुट करेगा:
red rose white rose
अधिक रेगेक्स
awk '/^p/' flowers.txt
यह आदेश केवल p . से शुरू होने वाले रिकॉर्ड को आउटपुट करेगा :
pink flamingo purple foxglove
फ़ील्ड चर का उपयोग करना
फ़ील्ड वैरिएबल . का उपयोग करके , आप रिकॉर्ड के लिए केवल पहला फ़ील्ड p . से शुरू कर सकते हैं आउटपुट कर सकते हैं :
awk '/^p/ {print $1;}' flowers.txt
जो आउटपुट करेगा:
pink purple
अन्य प्रोग्राम से आउटपुट प्रोसेस करना
आप पाइप कर सकते हैं अन्य Linux शेल प्रोग्राम से आउटपुट awk . में प्रसंस्करण के लिए। यह उदाहरण ls -l . से आउटपुट लेता है आदेश, जो वर्तमान निर्देशिका की सामग्री को सूचीबद्ध करता है और पांचवें . की सामग्री लौटाता है फ़ील्ड (फ़ाइल का आकार):
ls -l | awk '{print $5}'
जो कुछ इस तरह आउटपुट करेगा:
3104 3072 224 256
...(इस पर निर्भर करता है कि वर्तमान निर्देशिका में कितनी फाइलें हैं और वे कितनी बड़ी हैं)।
अंतर्निहित चर का उपयोग करना
awk '{print NR "-" $2 }' flowers.txt
यह कमांड वर्तमान रिकॉर्ड नंबर (फाइल लाइन नंबर) को प्रिंट करेगा और उसके बाद दूसरा फील्ड - फूल का नाम:
1-red rose 2-yellow daffodil 3-pink flamingo 4-white rose 5-blue iris 6-white lily 7-red peony 8-yellow orchid 9-purple foxglove
कार्यों का संयोजन
शर्तें और कार्रवाइयां && . का उपयोग करके जोड़ा जा सकता है यह आदेश उन सभी रिकॉर्डों को प्रिंट करेगा जहां पहले फ़ील्ड में टेक्स्ट लाल . है और दूसरी फ़ील्ड में 5 वर्णों से कम है :
awk '$1 ~ /red/ && length($NF) < 5 { print }' flowers.txt
नोट:
- $NF . का उपयोग $2 . का उपयोग करने के विकल्प के रूप में दूसरे क्षेत्र में जाने के लिए - संभव है क्योंकि यह अंतिम फ़ील्ड है और इस प्रकार NF (फ़ील्ड की संख्या) के बराबर है
- द लंबाई () फ़ंक्शन का उपयोग फ़ील्ड की लंबाई की गणना करने के लिए किया जाता है
तो यह उदाहरण फ़ाइल से एकल मिलान रिकॉर्ड देता है:
red rose
निष्कर्ष
अजीब एक कारण के लिए लिनक्स के साथ बहुत अधिक सार्वभौमिक रूप से शामिल है - यह टेक्स्ट को खोजने और संसाधित करने के लिए एक मुख्य उपकरण है, जिसका उपयोग आप अपने सिस्टम में कुछ गलत होने पर या शोध उपयोग के लिए कैप्चर किए गए डेटा को संसाधित करने के लिए लॉग प्रविष्टियों को जल्दी से खोजने के लिए कर सकते हैं।
यदि आपने कभी भी टेक्स्ट फ़ाइलों के एक बड़े संग्रह पर एक साधारण खोज/प्रतिस्थापन के अलावा कुछ भी करने का प्रयास किया है, तो आपको चलाने की आवश्यकता के बिना प्रोग्रामेटिक रूप से अपने सभी टेक्स्ट में विशेष रूप से प्रतिस्थापन या अपडेट करने में सक्षम होने का मूल्य पता चल जाएगा। अलग-अलग कमांड खोजें/बदलें।
हमारी अन्य Linux युक्तियाँ देखें!