2009-10-27 13 views
389
  • awk और sed के बीच क्या अंतर है?
  • sed और awk tools के लिए मामलों का सबसे अच्छा उपयोग किस प्रकार का है?
+1

unix.stackexchange पर एक संबंधित क्यूए: [क्या grep, awk और sed के लिए कोई बुनियादी ट्यूटोरियल है?] (Http: //unix.stackexchange .com/प्रश्न/2434/is-there-a-basic-tutorial-for-grep-awk-and-sed) – Dani

उत्तर

438

sed एक स्ट्रीम संपादक है। यह प्रति पंक्ति के आधार पर पात्रों की धाराओं के साथ काम करता है। इसमें एक आदिम प्रोग्रामिंग भाषा है जिसमें गोटो-स्टाइल लूप और सरल सशर्त (पैटर्न मिलान और पता मिलान के अलावा) शामिल हैं। अनिवार्य रूप से केवल दो "चर" हैं: पैटर्न स्थान और होल्ड स्पेस। स्क्रिप्ट की पठनीयता मुश्किल हो सकती है। गणितीय परिचालन सबसे अच्छा अजीब रूप से अजीब हैं।

कमांड लाइन विकल्पों और भाषा सुविधाओं के समर्थन के विभिन्न स्तरों के साथ sed के विभिन्न संस्करण हैं।

awk प्रति पंक्ति के आधार पर सीमित क्षेत्रों की ओर उन्मुख है। इसमें if/else, while, do/while और for (सी-स्टाइल और सरणी पुनरावृत्ति) सहित अधिक मजबूत प्रोग्रामिंग संरचनाएं हैं। चर और एकल-आयाम सहयोगी सरणी प्लस (आईएमओ) क्लुजी बहु-आयाम सरणी के लिए पूर्ण समर्थन है। गणितीय परिचालन सी में उन जैसा दिखता है। इसमें printf और फ़ंक्शन हैं। "K" "AWK" के लिए "कश्मीर ernighan" खड़ा पुस्तक "सी प्रोग्रामिंग भाषा" के "Kernighan और रिची" के रूप में प्रसिद्धि ( हो और डब्ल्यू ए einberger भूलना नहीं)। कोई awk का उपयोग करके अकादमिक साहित्य चोरी का एक डिटेक्टर लिख सकता है।

जीएनयू awk (gawk) में नवीनतम संस्करण में वास्तविक बहुआयामी सरणी समेत कई एक्सटेंशन हैं। awk की अन्य भिन्नताएं हैं जिनमें mawk और nawk शामिल हैं।

दोनों प्रोग्राम पाठ का चयन और प्रसंस्करण के लिए नियमित अभिव्यक्तियों का उपयोग करते हैं।

मैं sed का उपयोग करना चाहूंगा जहां पाठ में पैटर्न हैं। उदाहरण के लिए, आप "ऋणात्मक के ब्रैकेट्स" फ़ॉर्म (उदाहरण के लिए "(231) के साथ" अंकों के अनुक्रम के बाद "शून्य-चिह्न" के रूप में "पाठ के क्रम में" (उदाहरण के लिए "-231.45") में सभी नकारात्मक संख्याओं को प्रतिस्थापित कर सकते हैं।45)।: रिकॉर्ड "और" क्षेत्रों "अगर") का उपयोग इस (जो सुधार की गुंजाइश है)

sed 's/-\([0-9.]\+\)/(\1)/g' inputfile 

मैं awk का प्रयोग करेंगे जब पाठ अधिक पंक्तियों और स्तंभों की तरह दिखता है या awk के रूप में, उन्हें को संदर्भित करता है " मैं के रूप में ऊपर एक समान आपरेशन क्या करने जा रहा था, लेकिन केवल एक साधारण अल्पविराम सीमांकित फ़ाइल में तीसरे क्षेत्र मैं की तरह कुछ कर सकता पर:

awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile 
बेशक

उन सिर्फ बहुत ही सरल उदाहरण है कि उदाहरण देकर स्पष्ट नहीं है क्षमताओं की पूरी श्रृंखला जिसे प्रत्येक को पेश करना है।

+3

तत्काल स्पष्टीकरण के लिए डेनिस धन्यवाद। – Rachel

+3

'sed' की सीमाओं को धक्का देने के कुछ उदाहरण देखने के लिए: http://sed.sourceforge.net/#scripts –

+3

डेनिस धन्यवाद उदाहरण उदाहरणों के लिए लिंक प्रदान करने के लिए – Rachel

94

1) अजीब और sed के बीच क्या अंतर है?

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

2) sed और awk tools के लिए किस प्रकार का एप्लिकेशन सबसे अच्छा उपयोग होता है?

निष्कर्ष: बहुत सरल पाठ पार्सिंग के लिए sed का उपयोग करें। उससे परे कुछ भी, अजीब बेहतर है। वास्तव में, आप पूरी तरह से sed ditch कर सकते हैं और बस अजीब का उपयोग करें। चूंकि उनके कार्य ओवरलैप और अजीब अधिक कर सकते हैं, बस अजीब का उपयोग करें। आप अपने सीखने की वक्र को भी कम कर देंगे।

+5

सीखने की अवस्था के बारे में अच्छा बिंदु .. बहुत सारे टूल मिश्रण कर सकते हैं .. इसलिए मैं grep सीखना पसंद करूंगा और केवल अजीब .. sed के बारे में भूल जाते हैं :) – Outlier

+104

^^ पर्याप्त sed। (क्षमा करें, मुझे करना था) –

+3

मुझे लगता है कि sed सीखना बहुत आसान है, इसलिए आपको इसके लिए खाते की आवश्यकता है। जैसे ही आप अजीब मास्टर करना सीखते हैं, हो सकता है कि यह उन चीजों के लिए तेज़ी से इसका उपयोग करने में सक्षम हो, जो आपको अभी तक अजीब में कैसे करना है, यह जानने के लिए उपयोगी हो सकता है। –

30

दोनों टूल्स टेक्स्ट के साथ काम करने के लिए हैं और कार्यों के लिए दोनों टूल्स का इस्तेमाल किया जा सकता है।

मेरे लिए उन्हें अलग करने का नियम है: sed का उपयोग उन कार्यों को स्वचालित करने के लिए करें जो आप अन्यथा पाठ संपादक में करेंगे। यही कारण है कि इसे स्ट्रीम संपादक कहा जाता है। (आप vim में पाठ को संपादित करने के लिए एक ही कमांड का उपयोग कर सकते हैं)। awk का उपयोग करें यदि आप टेक्स्ट का विश्लेषण करना चाहते हैं, अर्थात् फ़ील्ड गिनती करना, कुल गणना करना, निकालना और संरचनाओं को पुनर्गठित करना आदि

इसके अलावा आपको grep को नहीं भूलना चाहिए। grep का उपयोग करें यदि आप केवल टेक्स्ट (फ़ाइल) में कुछ खोजना/निकालना चाहते हैं

संबंधित मुद्दे