दिलचस्प पोस्ट
एंड्रॉइड – TextView को टेक्स्ट सेट करें JQuery में चेकबॉक्स मान प्राप्त करें क्या तेज है: in_array या isset? नए iPhone 6 और 6+, @ 3x समर्थन के लिए छवि संकल्प जोड़ा गया? क्या कंस्ट्रक्शर्स एसिंक हो सकते हैं? Android – R को एक चर के लिए हल नहीं किया जा सकता स्कैनर बनाम बफ़्रैटेड रीडर यदि स्थिति पूरी हो जाती है तो सेल गठजोड़ में केवल पढ़ने के लिए सेल बनाएं एक पेज में एकाधिक फॉर्म या मल्टीपल सबमिट्स? मैं 500 आंतरिक सर्वर त्रुटि देने के बजाय PHP कैसे त्रुटि प्रदर्शित कर सकता हूं फोर्स मावेन अपडेट PHP में स्ट्रिंग में पूर्णांक को परिवर्तित करना एएसपी.नेट वेब एपीआई 2: बाहरी प्रमाणीकरण सेवाओं के साथ कैसे प्रवेश करें? चुनाव और चयन के बीच मतभेद क्या हैं? पता कैसे करें कि पायथन यूसीएस -2 या यूसीएस -4 के साथ संकलित है?

क्या ए / आरम्भ / / / अंत / रेंज अभिव्यक्ति है जो कभी भी awk में उपयोगी है?

मैंने हमेशा तर्क दिया है कि आपको कभी भी किसी श्रेणी की अभिव्यक्ति का उपयोग नहीं करना चाहिए:

/start/,/end/ 

awk में क्योंकि यद्यपि यह मामूली मामला बना देता है जहां आप प्रारंभिक और समाप्ति लाइनों सहित मिलान वाले पाठ को केवल वैकल्पिक से तुलना में थोड़ा सा प्रिंट करना चाहते हैं:

 /start/{f=1} f{print; if (/end/) f=0} 

जब आप इसे थोड़ा और भी कुछ करना चाहते हैं, तो उसे दोबारा दोहराया या अन्यथा अवांछनीय कोड में पूर्ण पुनः लिखना या परिणाम की आवश्यकता होती है। उदाहरण के लिए, यदि आप ऊपर दिए गए दूसरे फार्म का उपयोग करते हुए सीमा सीमांकक को छोड़कर मिलान टेक्स्ट को मुद्रित करना चाहते हैं तो आप इसके आस-पास के घटकों को स्थानांतरित करने के लिए इसे ट्विक कर सकते हैं:

 f{if (/end/) f=0; else print} /start/{f=1} 

लेकिन अगर आप /start/,/end/ साथ शुरू किया तो आपको उस पोस्ट के पक्ष में उस दृष्टिकोण को छोड़ना होगा जो मैंने अभी पोस्ट किया है या आपको ऐसा कुछ लिखना होगा:

 /start/,/end/{ if (!/start|end/) print } 

यानी उन स्थितियों का नकल करें जो अवांछनीय हैं

फिर मैंने एक प्रश्न पोस्ट किया जो पोस्ट में अंतिम end पहचान करने के लिए आवश्यक था और जहां समाधान में एक रेंज अभिव्यक्ति का उपयोग किया गया था और मैंने सोचा कि ऐसा लगता है कि इसमें कुछ मान हो सकता है ( https://stackoverflow.com/a/21145009/ देखें) 1745001 )

अब, हालांकि, मैं सोच रहा हूं कि यह रेंज एक्सप्रेशंस के साथ परेशान करने के लायक नहीं है और उस रेंज का उपयोग नहीं करने वाला एक समाधान उस मामले के लिए ठीक ही काम करेगा।

तो – क्या किसी के पास ऐसा कोई उदाहरण है, जहां किसी श्रेणी अभिव्यक्ति में वास्तव में एक समाधान के लिए ध्यान देने योग्य मूल्य शामिल होता है?

* मैं इसका इस्तेमाल करता था:

 /start/{f=1} f; /end/{f=0} 

लेकिन कई बार मुझे पता चला कि जब f सच है और /end/ पाया जाता है (या इसे दूसरी तरह से करना है तो केवल कुछ करना है जब /end/ पाया जाता है तो f सही होता है) तो अब मैं सिर्फ छड़ी करने की कोशिश करता हूं थोड़ा कम संक्षिप्त लेकिन अधिक मजबूत और विस्तारणीय करने के लिए:

 /start/{f=1} f{print; if (/end/) f=0} 

वेब के समाधान से एकत्रित समाधान "क्या ए / आरम्भ / / / अंत / रेंज अभिव्यक्ति है जो कभी भी awk में उपयोगी है?"

दिलचस्प। मैं भी अक्सर एक रेंज अभिव्यक्ति के साथ शुरू और फिर बाद में एक चर का उपयोग करने के लिए स्विच पर ..

मुझे लगता है कि ऐसी स्थिति है जहां यह उपयोगी हो सकती है, केवल शुद्ध रेंज-से-कम परिस्थितियों में से एक है, अगर आप किसी मैच को प्रिंट करना चाहते हैं, लेकिन तभी यह एक निश्चित सीमा में है इसके अलावा यह तुरंत स्पष्ट होता है कि यह क्या करता है। उदाहरण के लिए:

 awk '/start/,/end/{if(/ppp/)print}' file 

इस इनपुट के साथ:

 start dfgd gd ppp 1 gfdg fd gfd end ppp 2 ppp 3 start ppp 4 ppp 5 end ppp 6 ppp 7 gfdgdgd 

उत्पादन करेंगे:

 ppp 1 ppp 4 ppp 5 

– बेशक यह भी इस्तेमाल कर सकता है:

 awk '/start/{f=1} /ppp/ && f; /end/{f=0}' file 

लेकिन यह लंबा और कुछ हद तक कम पठनीय है ..

जब आप सही हैं कि /start/,/end/ range अभिव्यक्ति को आसानी से सशर्त के साथ पुन: क्रियान्वित किया जा सकता है, इसमें कई रोचक उपयोग-मामले हैं, जहां इसका उपयोग स्वयं ही किया जाता है। जैसा कि आप इसे देख रहे हैं, इसमें टैब्यूलर डेटा के प्रसंस्करण के लिए बहुत कम मूल्य हो सकता है, मुख्य लेकिन केवल awk के मामले का उपयोग न करें।

तो – क्या किसी के पास ऐसा कोई उदाहरण है, जहां किसी श्रेणी अभिव्यक्ति में वास्तव में एक समाधान के लिए ध्यान देने योग्य मूल्य शामिल होता है?

उल्लिखित उपयोग-मामलों में, सीमा अभिव्यक्ति स्पष्टता में सुधार करती है। यहां कुछ उदाहरण दिए गए हैं, जहां सीमा अभिव्यक्ति सही तरीके से संसाधित करने के लिए पाठ का चयन करती है। ये केवल उदाहरणों का एक हाथ है, लेकिन बहुत ही समान अनुप्रयोग हैं, जो awk की अविश्वसनीय बहुमुखी प्रतिभा का प्रदर्शन करते हैं।

एक समय सीमा के अंदर लॉग फ़िल्टर करें

मान लें कि प्रत्येक लॉग लाइन को आईएसओ टाइमस्टैम्प के साथ शुरू होता है, नीचे दिया गया फिल्टर 1 घंटे की दी गई श्रेणी में सभी ईवेंट का चयन करता है:

 awk '/^2015-06-30T12:00:00Z/,/^2015-06-30T13:00:00Z/' 

फ़ाइल से एक दस्तावेज़ निकालें

 awk '/---- begin file.data ----/,/---- end file.data ----/' 

इसका उपयोग शेल स्क्रिप्ट ( बिल्ली के साथ) के साथ संसाधनों को बंडल करने के लिए किया जा सकता है, जो कि --clearsign हस्ताक्षरित संदेशों के साथ-साथ कुछ हिस्सों को निकालने के लिए (- --clearsign साथ तैयार) या अधिक आम तौर पर MIME-messages

LaTeX फ़ाइलों की प्रक्रिया

लेटेक्स परिवेश से मिलान करने के लिए रेंज पैटर्न का उपयोग किया जा सकता है, इसलिए उदाहरण के लिए हम हमारी निर्देशिका में सभी लेखों का सार चुन सकते हैं:

 awk '/begin{abstract}/,/end{abstract}/' *.tex 

या सभी प्रमेयों, एक प्रमेय डेटाबेस तैयार करने के लिए!

 awk '/begin{theorem}/,/end{theorem}/' *.tex 

या एक linter लिखना सुनिश्चित करें कि प्रमेयों में उद्धरण शामिल न हों (यदि हम इसे बुरी शैली मानते हैं):

 awk ' /begin{theorem}/,/end{theorem}/ { if(/\\cite{/) { c+= 1 } } END { printf("There were %d bad-style citations.\n", c) } ' 

या प्रीप्रोसेस टेबल्स आदि।