बस जानना चाहते हैं कि उनके बीच मुख्य अंतर क्या हैं? और प्रत्येक भाषा की शक्ति (जहां इसका उपयोग करना बेहतर है)।
संपादित करें: यह "बनाम" नहीं है विषय की तरह, बस जानकारी।
बस जानना चाहते हैं कि उनके बीच मुख्य अंतर क्या हैं? और प्रत्येक भाषा की शक्ति (जहां इसका उपयोग करना बेहतर है)।
संपादित करें: यह "बनाम" नहीं है विषय की तरह, बस जानकारी।
जवाबों:
उपस्थिति के क्रम में, भाषाएं हैं sed
, awk
, perl
, python
।
sed
कार्यक्रम एक धारा संपादक है और इनपुट फ़ाइल या फ़ाइलों का (लाइनों की निर्दिष्ट श्रेणियों के लिए, या अधिक आम तौर) प्रत्येक पंक्ति के लिए एक स्क्रिप्ट से कार्रवाई लागू करने के लिए बनाया गया है। इसकी भाषा ed
यूनिक्स संपादक पर आधारित है , और यद्यपि इसमें सशर्त और इतने पर हैं, जटिल कार्यों के लिए काम करना मुश्किल है। आप इसके साथ मामूली चमत्कार काम कर सकते हैं - लेकिन अपने सिर पर बालों की कीमत पर। हालाँकि, यह संभवतः कार्यक्रमों का सबसे तेज़ है जब इसके रीमिट में कार्यों का प्रयास किया जाता है। (इसमें चर्चा किए गए कार्यक्रमों की कम से कम शक्तिशाली नियमित अभिव्यक्तियाँ हैं - कई उद्देश्यों के लिए पर्याप्त, लेकिन निश्चित रूप से पीसीआर नहीं - पर्ल-कम्पेटिबल एक्सप्रेस इंजन)
awk
कार्यक्रम (इसके लेखक के नाम के पहले अक्षर से नाम - Aho, वेंबेर्गेर, और Kernighan) की रिपोर्ट फ़ॉर्मेट करने के लिए एक उपकरण के शुरू में है। इसका उपयोग सूप-अप के रूप में किया जा सकता है sed
; इसके अधिक हाल के संस्करणों में, यह कम्प्यूटेशनल रूप से पूर्ण है। यह एक दिलचस्प विचार का उपयोग करता है - कार्यक्रम 'पैटर्न से मेल खाते' और 'पैटर्न से मेल खाते होने पर की गई कार्रवाई' पर आधारित है। पैटर्न काफी शक्तिशाली (एक्सटेंडेड रेगुलर एक्सप्रेशन) हैं। कार्यों के लिए भाषा सी के समान है। इसकी एक प्रमुख विशेषता awk
यह है कि यह इनपुट को रिकॉर्ड में और प्रत्येक रिकॉर्ड को फ़ील्ड में विभाजित करता है।
पर्ल को एक अजीब-हत्यारे और सेड-किलर के रूप में लिखा गया था। यह कर रहे हैं के साथ प्रदान की कार्यक्रमों की दो a2p
और s2p
परिवर्तित करने के लिए awk
स्क्रिप्ट और sed
पर्ल में स्क्रिप्ट। पर्ल स्क्रिप्टिंग भाषाओं की अगली पीढ़ी में से एक है (Tcl / Tk शायद प्रधानता का दावा कर सकती है)। इसमें एक बहुत अधिक शक्तिशाली भाषा के साथ शक्तिशाली एकीकृत नियमित अभिव्यक्ति हैंडलिंग है। यह लगभग सभी सिस्टम कॉल तक पहुंच प्रदान करता है और इसमें CPAN मॉड्यूल की व्यापकता है। (न तो awk
न तो sed
एक्स्टेंसिबल है।) पर्ल का एक मोट्टोस "TMTOWTDI है - इसे करने का एक से अधिक तरीका है" (उच्चारण "टिम-टूडी")। पर्ल के पास 'ऑब्जेक्ट' हैं, लेकिन यह भाषा के मूल भाग की तुलना में अधिक ऐड-ऑन है।
पायथन को आखिरी बार लिखा गया था, और शायद पर्ल की प्रतिक्रिया के रूप में। इसमें कुछ दिलचस्प वाक्यात्मक विचार हैं (स्तरों को इंगित करने के लिए इंडेंटिंग - कोई ब्रेसिज़ या समकक्ष नहीं)। यह पर्ल की तुलना में अधिक मौलिक रूप से ऑब्जेक्ट-ओरिएंटेड है; यह पर्ल की तरह ही एक्स्टेंसिबल है।
ठीक है - प्रत्येक का उपयोग कब करें?
मुझे कुछ भी पता नहीं है कि पर्ल ऐसा कर सकता है, न ही पायथन कर सकता है, न ही इसके विपरीत। दोनों के बीच का चुनाव अन्य कारकों पर निर्भर करेगा। मैंने पायल को सीखने से पहले पायथन को सीखा था, इसलिए मैं इसका इस्तेमाल करता हूं। पायथन में कम संकेंद्रित सिंटैक्स होता है और आमतौर पर सीखने के लिए कुछ सरल होता है। पर्ल 6, जब यह उपलब्ध हो जाता है, तो एक आकर्षक विकास होगा।
(ध्यान दें कि विशेष रूप से, पर्ल और पायथन के 'ओवरव्यू' बहुत ही अधूरे हैं; पूरी किताबें विषय पर लिखी जा सकती हैं।)
awk
अधिक sed
सीखने के लिए (हालांकि दोनों अभी भी उनके उपयोग है)। कार्य के आकार के रूप में: sed
यह उस समय सबसे अच्छा होता है जब यह एक समय में एक लाइन को संसाधित करता है, जिसमें लाइन से लाइन तक कोई भंडारण नहीं होता है। awk
अक्सर सभी स्रोतों से संचित डेटा के साथ साहचर्य सरणियों के निर्माण के लिए उपयोग किया जाता है; यह अधिक मेमोरी का उपयोग करता है, और इसलिए बड़े डेटा सेट के साथ समस्याओं में चलने की अधिक संभावना sed
है। tsawk
इससे पहले कि आप इससे जुड़े, मैंने नहीं सुना । जब कोई कार्य बहुत अधिक होता है, तो मैं पर्ल पर वापस गिर जाता हूं (लेकिन आप पायथन के साथ बेहतर कर सकते हैं) awk
।
कुछ दर्जन भाषाओं में महारत हासिल करने के बाद, आप एस। लोट जैसे लोगों से थक जाते हैं (इस सवाल का विवादास्पद जवाब देखें, लगभग आधे वोट जितने हैं) (जवाब देने के छह साल बाद (45 / -22)।
एसड बेहद सरल कमांड-लाइन पाइपलाइनों के लिए सबसे अच्छा उपकरण है। एक सिड मास्टर के हाथों में, यह मनमानी जटिलता के एक-बंद के लिए उपयुक्त है, लेकिन इसका उपयोग उत्पादन कोड में बहुत सरल प्रतिस्थापन पाइपलाइनों को छोड़कर नहीं किया जाना चाहिए। सामान जैसे 's / this / that /'।
Gawk (GNU awk) अभी तक जटिल डेटा रिफॉर्मैटिंग के लिए सबसे अच्छा विकल्प है, जब केवल एक इनपुट स्रोत और एक आउटपुट (या, कई आउटपुट क्रमिक रूप से लिखे गए) हो। चूंकि वास्तविक दुनिया के काम का एक बड़ा हिस्सा इस विवरण के अनुरूप है, और एक अच्छा प्रोग्रामर दो घंटे में गॉक सीख सकता है, यह सबसे अच्छा विकल्प है। इस ग्रह पर, सरल और तेज बेहतर है!
जब आप बहुत जटिल इनपुट / आउटपुट परिदृश्य रखते हैं, तो पर्ल या पायथन, awk या sed के किसी भी संस्करण से बेहतर होते हैं। समस्या जितनी जटिल है, आप रखरखाव और पठनीयता के दृष्टिकोण से अजगर से बेहतर हैं। ध्यान दें, हालांकि, एक अच्छा प्रोग्रामर किसी भी भाषा में पठनीय कोड लिख सकता है, और एक बुरा प्रोग्रामर किसी भी उपयोगी भाषा में अनपेक्षित बकवास लिख सकता है, इसलिए पर्ल या अजगर की पसंद को प्रोग्रामर की प्राथमिकताओं के लिए सुरक्षित रूप से छोड़ा जा सकता है यदि प्रोग्रामर ने कहा हो कुशल और चतुर।
a?ⁿaⁿ
, a??ⁿaⁿ
तो ⁿ
1,000,000 से एक के साथ पर्ल 5 में चलाने के लिए यह दो सेकंड से भी कम समय में चलता है। time perl -E '$x=1_000_000;$_="a"x$x;$m=("a??"x$x).("a"x$x);say $_=~$m'
यदि आप भोले को चलाते हैं, तो इसे ⁿ
25 सेकंड के लिए दो सेकंड से अधिक समय लगता है । आपको जिस चीज़ का एहसास होना है, वह है पर्ल के पास रीजेक्स की अधिक विशेषताएँ हैं, जिसमें आपको रेगेक्स के अंदर पर्ल कोड की अनुमति देना शामिल है, जो मेल खाता है । यदि आप चाहते हैं तो आप उन मॉड्यूलों में से किसी एक के लिए एक स्वैप लागू कर सकते हैं।
मैं सीड को पूरी तरह से प्रोग्रामिंग की गई भाषा नहीं कहूंगा, यह एक स्ट्रीम एडिटर है, जिसका उद्देश्य प्रोग्राम्स को टेक्स्ट फाइल को प्रोग्रामेटिक रूप से एडिट करना है।
अक्क सामान्य प्रयोजन की भाषा का थोड़ा अधिक है, लेकिन यह अभी भी पाठ प्रसंस्करण के लिए सबसे उपयुक्त है।
पर्ल और पायथन पूरी तरह से विकसित हैं, सामान्य प्रयोजन प्रोग्रामिंग भाषा। टेक्स्ट प्रोसेसिंग में पर्ल की जड़ें हैं और इसमें कई awk-like constructs हैं (नेट पर इधर-उधर घूमने वाली एक awk-to-perl स्क्रिप्ट भी है)। पर्ल और पाइथन के बीच कई अंतर हैं, आपका सबसे अच्छा शर्त शायद विकिपीडिया जैसी दोनों भाषाओं के सारांश को पढ़ना है कि वे क्या हैं, इस पर एक अच्छी समझ प्राप्त करें।
सबसे पहले, "पर्ल, पायथन ऑक एंड सेड" सूची में दो असंबंधित चीजें हैं।
बात 1 - सरलीकृत पाठ हेरफेर उपकरण।
sed। इसमें फ़ाइल की प्रत्येक पंक्ति को पढ़ने और जांचने के विचार से परिभाषित कार्य का एक निश्चित, अपेक्षाकृत सरल क्षेत्र है। सीड को विशेष रूप से पठनीय नहीं बनाया गया है। यह बहुत छोटे यूनिक्स सर्वरों पर बहुत छोटा और बहुत कुशल होने के लिए डिज़ाइन किया गया है।
awk। इसमें थोड़ा कम निश्चित, कम सरल कार्य है। हालाँकि, किसी awk प्रोग्राम का मुख्य लूप स्रोत फ़ाइल की पंक्तियों के अंतर्निहित रीडिंग द्वारा परिभाषित किया गया है।
ये "पूर्ण" प्रोग्रामिंग भाषा नहीं हैं। जब आप कर सकते हैं - कुछ काम के साथ - जाग में काफी परिष्कृत कार्यक्रम लिखें, यह तेजी से जटिल और पढ़ने में मुश्किल हो जाता है।
बात 2 - सामान्य-प्रयोजन प्रोग्रामिंग भाषाओं। इनमें कई प्रकार के स्टेटमेंट प्रकार, कई अंतर्निहित डेटा संरचनाएं, और बोलने के लिए कोई वायर्ड-इन अनुमान या शॉर्टकट नहीं हैं।
पर्ल।
अजगर।
उनका उपयोग कब करना है।
sed। कभी नहीँ। यह वास्तव में 32K से अधिक मेमोरी वाले कंप्यूटर के आधुनिक युग में कोई मूल्य नहीं है। पर्ल या पायथन वही काम अधिक स्पष्ट रूप से करते हैं।
awk। कभी नहीँ। सिड की तरह, यह कंप्यूटिंग के एक पुराने युग को दर्शाता है। इस भाषा को बनाए रखने के बजाय (एक सफल प्रणाली के लिए आवश्यक अन्य सभी के अलावा), यह सिर्फ एक सुखद भाषा में सब कुछ करने के लिए अधिक सुखद है।
पर्ल। किसी भी तरह की कोई भी प्रोग्रामिंग समस्या। यदि आप फ्री-थिंकिंग सिंटैक्स पसंद करते हैं, जहां एक ही काम करने के कई, कई तरीके हैं, तो मज़ा मजेदार है।
अजगर। किसी भी तरह की कोई भी प्रोग्रामिंग समस्या। यदि आप काफी सीमित वाक्यविन्यास पसंद करते हैं, जहां कम विकल्प हैं, कम सूक्ष्मता है, और (शायद) अधिक स्पष्टता है। अजगर की वस्तु-उन्मुख प्रकृति इसे बड़ी, जटिल समस्याओं के लिए अधिक उपयुक्त बनाती है।
पृष्ठभूमि - मैं सीड को कोस नहीं रहा हूं और अज्ञानता से बाहर जाग रहा हूं। मैंने 20 साल पहले जागना सीखा था। इसके साथ कई चीजें कीं; इसे एक मुख्य यूनिक्स कौशल के रूप में पढ़ाया जाता है। मैंने लगभग 15 साल पहले पर्ल सीखा था। इसके साथ कई परिष्कृत चीजें कीं। मैंने दोनों को पीछे छोड़ दिया है क्योंकि मैं पायथन में एक ही काम कर सकता हूं - और यह सरल और अधिक स्पष्ट है।
Sed और awk के साथ दो गंभीर समस्याएं हैं, जिनमें से कोई भी उनकी उम्र नहीं है।
उनके कार्यान्वयन की अपूर्णता। सब कुछ sed और awk do पायथन या पर्ल में किया जा सकता है, अक्सर अधिक सरल और कभी-कभी तेज भी। एक शेल पाइपलाइन की बहु-प्रसंस्करण के कारण कुछ प्रदर्शन लाभ हैं। पायथन subprocess
मुझे उन लाभों को पुनर्प्राप्त करने की अनुमति देने के लिए एक मॉड्यूल प्रदान करता है ।
एक और भाषा सीखने की जरूरत है। पायथन (या पर्ल) में चीजें करने से आपका कार्यान्वयन कम भाषाओं पर निर्भर करता है, जिसके परिणामस्वरूप स्पष्टता में वृद्धि होती है।
उनका उपयोग कब करें: awk - कभी नहीं - एस लोट।
मुझे लगता है कि एस। लोट्टो इस सिफारिश के साथ निशान से थोड़ा चूक गया। तथ्य यह है कि लिनक्स पर और अन्य UNIX वातावरण में, awk एक उपयोगी उपकरण है जिसका उपयोग तेज पाठ प्रक्रिया के लिए bash, sh और ksh के साथ किया जाता है। स्वयं स्क्रिप्टिंग का विचार है कि आप इस टूल, उस टूल को एक साथ जोड़कर अपनी समस्या का समाधान करें। इसलिए व्यवस्थापक लिपियों में, ls, grep।,, Awk, time, ps, आदि होना आम बात है। प्रत्येक उपकरण एक ऐसा उपकरण है जो भवन को खत्म करने के लिए ईंट को एक ईंट की तरह मिलाता है (इमारत को हाथ से हल करने के लिए) ।
उदाहरण के लिए, मैं पेंटबॉल गियर आपूर्ति का प्रबंधन करने वाली टीम का सदस्य हूंडॉटकॉम। यह ई-कॉमर्स साइट LAMP स्टैक पर आधारित है। बैक एंड डेटाबेस में विभिन्न आपूर्तिकर्ताओं से स्वचालित प्रसंस्करण और डेटा फीडिंग के लिए, हम बैश, पर्ल, php और यहां तक कि अपेक्षा सहित स्क्रिप्ट के विविध मिश्रण को नियोजित और बनाए रखते हैं। उपलब्ध मॉड्यूल और एपीआई के आधार पर प्रत्येक की अपनी ताकत है। बैश लिपियों में हम त्वरित पैटर्न से मेल खाते हैं और पैटर्न पर उचित कार्य करते हैं, जैसे कि पेर के लिए स्विच करने की आवश्यकता के बिना जाग का उपयोग करना। एक बात मैं यह भी बताना चाहूंगा कि थ्रेड में जोर नहीं दिया गया है, यह है कि इन लिपियों की एक उचित संख्या खरीदी गई थी, या खुले स्रोत से प्राप्त हुई थी। यदि स्क्रिप्ट पर्ल के रूप में आई, तो हम इसे पर्ल के रूप में बनाए रखते हैं; अगर स्क्रिप्ट Php के रूप में आती है, तो हम इसे Php के रूप में बनाए रखते हैं; अगर यह बैश के रूप में आया, तो हम इसे बैश के रूप में बनाए रखते हैं;
ls
करें, इसके बजाय ग्लोब का उपयोग करें। इसे पढ़ें।