Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

Linux पर awk मास्टर करें: वास्तविक-विश्व उदाहरणों के साथ व्यावहारिक गाइड

यह गाइड आपको Linux में awk कमांड का उपयोग करना दिखाता है, बहुत सारे उपयोगी रोजमर्रा के उदाहरणों के साथ।

AWK Linux ऑपरेटिंग सिस्टम के लिए टेक्स्ट खोजने और हेरफेर करने के लिए एक टूल और भाषा है।

awk कमांड और संबंधित स्क्रिप्टिंग भाषा एक पैटर्न द्वारा परिभाषित टेक्स्ट के लिए फ़ाइलों को खोजती है और पैटर्न से मेल खाने वाले टेक्स्ट पर एक विशिष्ट एक्शन करती है।

awk बड़े टेक्स्ट फ़ाइलों या बड़ी संख्या में टेक्स्ट फ़ाइलों से डेटा निकालने और रिपोर्ट बनाने के लिए एक उपयोगी टूल है – उदाहरण के लिए लॉग प्रोसेसिंग, या तापमान प्रोब जैसे डेटा-रिकॉर्डिंग डिवाइस का आउटपुट, जिन्होंने समय के साथ बहुत सारा डेटा एकत्र किया है। इसका उपयोग डेटाबेस क्वेरी के आउटपुट पर भी किया जा सकता है।

awk; इंस्टॉल करने की कोई आवश्यकता नहीं है; यह पहले से ही आपके Linux सिस्टम पर उपलब्ध होना चाहिए।

awk सिंटैक्स

टर्मिनल में awk कमांड का उपयोग करने के लिए सिंटैक्स इस प्रकार है:

awk [PROGRAM] [INPUT FILES]

ध्यान दें कि:

  • [PROGRAM] खोज पैटर्न और लेने वाली कार्रवाई है – यह वह प्रोग्राम है जिसे आप awk को आपूर्ति की गई फ़ाइलों पर चलाना चाहते हैं
    • इसे -f विकल्प का उपयोग करके इंलाइन के बजाय टेक्स्ट फ़ाइल के रूप में भी आपूर्ति किया जा सकता है
  • [INPUT FILES] वे फ़ाइलें हैं जिन्हें आप awk पर काम करना चाहते हैं – यह स्पेस से अलग कई फ़ाइलें हो सकती हैं, या डायरेक्टरी का पथ, या मिलान करने के लिए फ़ाइलों का पैटर्न
    • यदि कोई इनपुट फ़ाइल निर्दिष्ट नहीं है, तो awk किसी अन्य कमांड से पाइप्ड आउटपुट पर काम करेगा

awk विकल्प

awk कमांड को निम्न विकल्प प्रदान किए जा सकते हैं:

-f program-file प्रोग्राम टेक्स्ट कमांड-लाइन के बजाय फ़ाइल से पढ़ा जाता है। एकाधिक -f विकल्प स्वीकार किए जाते हैं।
-F value फील्ड सेपरेटर, FS, को value पर सेट करता है।
-v var=value प्रोग्राम वेरिएबल var को value असाइन करता है।

आपके awk संस्करण के लिए अधिक कार्यान्वयन-विशिष्ट विकल्पों के लिए, आप निम्न चलाकर मैनुअल देख सकते हैं:

man awk

प्रोग्राम एक्शन और वेरिएबल

awk को आपूर्ति किया गया प्रोग्राम यह निर्धारित करेगा कि यह आपके द्वारा आपूर्ति की गई टेक्स्ट फ़ाइलों पर क्या करता है। एक awk प्रोग्राम निम्न प्रारूप लेता है:

CONDITION { ACTION } CONDITION { ACTION } ...

जहां CONDITION मिलान करने के लिए टेक्स्ट का पैटर्न है और ACTION मिलान टेक्स्ट पर की जाने वाली कार्रवाई है। आप जितनी चाहें उतनी शर्तें और कार्रवाई कर सकते हैं।

एक्शन

आपूर्ति की गई कार्रवाइयां कमांड हैं जिनमें गणना, वेरिएबल, और फ़ंक्शन कॉल शामिल हो सकते हैं। कुछ बिल्ट-इन फ़ंक्शन कार्यान्वयन-विशिष्ट हैं, इसलिए इनके लिए अपने मैनुअल की जांच करना सबसे अच्छा है।

रिकॉर्ड

awk आमतौर पर टेक्स्ट फ़ाइल में प्रत्येक नई लाइन को रिकॉर्ड मानता है जब तक कि OPTIONS के माध्यम से अन्यथा निर्दिष्ट न किया जाए।

फ़ील्ड

awk डिफ़ॉल्ट रूप से व्हाइटस्पेस (स्पेस, टैब) का उपयोग करके रिकॉर्ड में फ़ील्ड को दर्शाता है जब तक कि OPTIONS के माध्यम से अन्यथा निर्दिष्ट न किया जाए।

वेरिएबल

awk में कई बिल्ट-इन वेरिएबल हैं जिनका उपयोग आप उन्हें स्वयं परिभाषित किए बिना कर सकते हैं, जो कुछ सामान्य परिदृश्यों को कवर करते हैं:

वेरिएबल अर्थ
$0 पूरे रिकॉर्ड का प्रतिनिधित्व करता है
$1, $2, $3 … फ़ील्ड वेरिएबल – रिकॉर्ड में व्यक्तिगत टेक्स्ट फ़ील्ड के लिए टेक्स्ट/मान रखते हैं
NR / Number of Records अब तक सभी फ़ाइलों से पढ़े गए इनपुट रिकॉर्ड की वर्तमान संख्या
FNR / File Number of Records वर्तमान फ़ाइल में अब तक पढ़े गए इनपुट रिकॉर्ड की वर्तमान संख्या – प्रत्येक नई फ़ाइल शुरू होने पर स्वचालित रूप से शून्य पर रीसेट
NF / Number of Fields वर्तमान इनपुट रिकॉर्ड में फ़ील्ड की संख्या – रिकॉर्ड में अंतिम फ़ील्ड को $NF का उपयोग करके संदर्भित किया जा सकता है, दूसरा अंतिम $(NF-1) का उपयोग करके, और इसी तरह
FILENAME वर्तमान इनपुट फ़ाइल का नाम
FS / Field Separator रिकॉर्ड में फ़ील्ड को अलग करने के लिए उपयोग किए जाने वाले कैरेक्टर। डिफ़ॉल्ट रूप से किसी भी स्पेस और टैब कैरेक्टर शामिल हैं
RS / Record Separator फ़ाइल में रिकॉर्ड को अलग करने के लिए उपयोग किए जाने वाले कैरेक्टर। डिफ़ॉल्ट रूप से नई लाइन
OFS / Output Field Separator Awk आउटपुट में फ़ील्ड को अलग करने के लिए उपयोग किए जाने वाले कैरेक्टर। डिफ़ॉल्ट एक सिंगल स्पेस है
ORS / Output Record Separator Awk आउटपुट में फ़ील्ड को अलग करने के लिए उपयोग किए जाने वाले कैरेक्टर। डिफ़ॉल्ट नई लाइन है
OFMT / Output ForMaT संख्यात्मक आउटपुट के लिए प्रारूप – डिफ़ॉल्ट प्रारूप "%.6g" है

awk उपयोग उदाहरण

इन उदाहरणों के लिए, हम flowers.txt नामक एक टेक्स्ट फ़ाइल पर काम करेंगे, जिसमें निम्न टेक्स्ट है:

red rose yellow daffodil pink flamingo white rose blue iris white lily red peony yellow orchid purple foxglove

फ़ाइल सामग्री प्रिंट करें

निम्न awk कमांड awk print फ़ंक्शन का उपयोग करके फ़ाइल की सामग्री को टर्मिनल पर आउटपुट करेगा:

awk '{print}' flowers.txt

फ़ाइल में रिकॉर्ड (लाइन्स) की संख्या प्रिंट करें

awk 'END { print NR }' sample.txt

यह उदाहरण फ़ाइल में लाइन्स की संख्या आउटपुट करेगा:

9

नियमित अभिव्यक्तियों का उपयोग करके फ़ाइल में टेक्स्ट खोजें

निम्न कमांड फ़ाइल में केवल rose प्रकार की पंक्तियों को आउटपुट करेगा:

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 कमांड से आउटपुट लेता है, जो वर्तमान डायरेक्टरी की सामग्री को सूचीबद्ध करता है और 5वें फ़ील्ड (फ़ाइल का आकार) की सामग्री लौटाता है:

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

एक्शन संयोजित करना

शर्तें और कार्रवाई को && का उपयोग करके संयोजित किया जा सकता है। यह कमांड उन सभी रिकॉर्ड को प्रिंट करेगा जहां पहला फ़ील्ड red टेक्स्ट रखता है और दूसरा फ़ील्ड 5 से कम कैरेक्टर रखता है:

awk '$1 ~ /red/ && length($NF) < 5 { print }' flowers.txt

ध्यान दें:

  • $NF का उपयोग दूसरे फ़ील्ड तक पहुंचने के विकल्प के रूप में – संभव है क्योंकि यह अंतिम फ़ील्ड है और इस प्रकार NF (फ़ील्ड की संख्या) के बराबर है
  • फ़ील्ड की लंबाई की गणना करने के लिए length() फ़ंक्शन का उपयोग किया जाता है

तो यह उदाहरण फ़ाइल से एक मिलान रिकॉर्ड लौटाता है:

red rose

निष्कर्ष

awk बहुत अच्छे कारण से Linux के साथ लगभग सार्वभौमिक रूप से शामिल है – यह टेक्स्ट खोजने और प्रोसेस करने के लिए एक प्रमुख टूल है, जिसका उपयोग आप अपने सिस्टम पर कुछ गलत होने पर लॉग एंट्री जल्दी खोजने के लिए या शोध उपयोग के लिए कैप्चर किए गए डेटा को प्रोसेस करने के लिए कर सकते हैं।

यदि आपने कभी टेक्स्ट फ़ाइलों के बड़े संग्रह पर सरल खोज/बदलाव से अधिक कुछ करने की कोशिश की है, तो आप जानेंगे कि अपने टेक्स्ट पर प्रोग्रामेटिक रूप से विशिष्ट प्रतिस्थापन या अपडेट करने में सक्षम होने का मूल्य, व्यक्तिगत खोज/बदलाव कमांड चलाए बिना।

हमारे अन्य Linux टिप्स देखें!


  1. लिनक्स में tee कमांड का उपयोग कैसे करें लिनक्स में tee कमांड का उपयोग कैसे करें

    यदि आप कभी अपने लिनक्स शेल के तहत पाइप और रीडायरेक्शन का उपयोग करते हैं, तो संभावना है कि आपको कभी-कभी tee यूटिलिटी का उपयोग करने की भी आवश्यकता होगी। tee क्या करता है? ls जैसी कमांड आपके वर्तमान डायरेक्टरी की सामग्री प्रदर्शित करेगी। दूसरे शब्दों में, यह इन सामग्री को stdout (स्टैंडर्ड आउटपुट) पर प

  1. Linux में नेटवर्क कनेक्शन मॉनिटर करने के लिए ss कमांड का उपयोग कैसे करें Linux में नेटवर्क कनेक्शन मॉनिटर करने के लिए ss कमांड का उपयोग कैसे करें

    यदि आप Linux का उपयोग करते हैं, तो शायद ऐसा समय आएगा जब आपको अपने नेटवर्क के बारे में अधिक जानने की आवश्यकता होगी। कई टूल इसमें आपकी मदद कर सकते हैं, और कुछ दूसरों की तुलना में अधिक जटिल हैं। ss कमांड एक ऐसा टूल है जिस पर आप भरोसा कर सकते हैं कि यह कई मशीनों पर इंस्टॉल होगा, इसलिए इसे जानना उपयोगी ह

  1. Linux Watch कमांड में मास्टरी: सिंटैक्स, विकल्प और व्यावहारिक उदाहरण Linux Watch कमांड में मास्टरी: सिंटैक्स, विकल्प और व्यावहारिक उदाहरण

    Linux में watch कमांड एक काम करता है – एक कमांड को दोहराता है और परिणाम को बार-बार आउटपुट करता है, जिससे आप परिवर्तनों को देख सकते हैं। यहाँ इसका उपयोग कैसे करें। watch कमांड सिंटैक्स watch कमांड का सिंटैक्स इस प्रकार है: watch OPTIONS COMMAND ध्यान दें कि: OPTIONS नीचे दी गई तालिका से विकल्पों की