Sunday, 15 June 2014

regex - awk lines not match -


AWK का उपयोग करना, मुझे विशिष्ट क्षेत्र में एक विशिष्ट शब्द के साथ प्रिंट लाइनों से बचने की आवश्यकता है .. किसी को फोन करने से पहले यह डुप्लिकेट है, मैंने खोज की है, और यह पाया:, लेकिन मुझे लगता है कि यह अन्य संदर्भ है, क्योंकि यहां मुझे एक विशिष्ट कॉलम में मिलान की आवश्यकता है।

डेटा को देखते हुए:

  एबीसी एबीसी एएफ़सी एएएए एएचएसी एबीसी  

मैं केवल पाठ के साथ पूर्ण लाइनों को प्रिंट करने के लिए फ़िल्टर करना चाहता हूं मुट्ठी क्षेत्र में एबीसी युक्त (पंक्ति 2 और 3)।

पहली कोशिश के रूप में, मैंने (?! ...) की कोशिश की और DEF और GHI < / कोड>:

  गूंज-ए "एबीसी \ tABC \ nDEF \ tAAA \ nGHI \ tABC" | Awk '$ 1 ~ / (? एबीसी) / {प्रिंट}'  

लेकिन कुछ भी नहीं लौटा।

दूसरा प्रयास करें ... अभिव्यक्ति से पहले का उपयोग नहीं करते ! /.../ :

  ~ $ echo -e "एबीसी \ tABC \ nDEF \ tAAA \ nGHI \ tABC" |  

मुझे समझ नहीं आ रहा है कि क्यों ...

तो एक और शॉट विफल (जैसा कि इस समय अपेक्षित है):

  ~ $ echo -e "एबीसी \ tABC \ nDEF \ tAAA \ nGHI \ tABC" | Awk '! / एबीसी / {प्रिंट}' डीएएफ एएए   

जैसा कि इस बार अपेक्षित था, दूसरा क्षेत्र भी फ़िल्टर किया गया था ऐसा लगता है कि यह केवल $ 0 के लिए काम करता है।

तब मैंने अपना होमवर्क किया और इसे इस तरह से काम किया:

  ~ $ echo - ई "एबीसी \ tABC \ nDEF \ tAAA \ nGHI \ tABC" | Awk '{FL = $ 0; $ 0 = $ 1}; ! / एबीसी / {प्रिंट FL}; {$ 0 = FL} 'डीईएफ एएए गही एबीसी  

वैसे भी, यह मेरे लिए एक वैकल्पिक हल दिखता है, और मेरे पास एक बुरा लग रहा है कि मैं सही तरीके से नहीं कर रहा हूं।

कोई बेहतर तरीके से जानता है, या कम से कम समझाएं कि पहली और दूसरी कोशिश क्यों नहीं करती?

आप निम्न मुहावरे का उपयोग कर सकते हैं:

  awk '$ 1! ~ / ABC /' फ़ाइल  

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


No comments:

Post a Comment