उन रेखाओं को हटाएं जहां किसी फ़ील्ड का मान 3 से कम या बराबर है - sed या awk?


18

मुझे 8 वीं फ़ील्ड (कॉलम) में 2 या उससे कम मान वाले प्रत्येक पंक्ति को निकालने की आवश्यकता है।

मेरा डेटा इस तरह दिखता है:

12-31   Airport 189 379 41  49.70946503 -124.91377258   2   2880    30.8
01-01   AlberniElementary   165 331 16  49.26100922 -124.80662537   4   5760    26.1
01-09   BamfieldMarine  161 323 23  48.83490372 -125.13572693   2   2875    27.4
01-10   BamfieldMarine  161 323 23  48.83490372 -125.13572693   3   3068    38.6

मैं समझता हूं कि awk का उपयोग करके मैं वांछित मानों को अलग कर सकता हूं और उन्हें किसी अन्य फ़ाइल पर प्रिंट कर सकता हूं, और मैं समझता हूं कि sed वर्तमान फ़ाइल को संपादित करेगा। किसी भी स्थिति में, मुझे मूल फ़ाइल को बनाए रखने की आवश्यकता है।

नोट : कृपया अपने समाधान के साथ पूरी तरह से स्पष्टीकरण प्रदान करें। यह केवल कमांड लिखने के लिए पर्याप्त नहीं है, कृपया सुझावों को एनोटेट करें।

आगे ध्यान दें : डेटा में हेडर लाइन है, इसलिए सबसे अधिक संभावित समाधान की आवश्यकता होगी

awk 'FNR> 1'

मुझे लगता है?

जवाबों:


20

आपने लगभग पा लिया।

 awk '(NR>1) && ($8 > 2 ) ' foo > bar

कहाँ पे

  • NR रिकॉर्ड की संख्या है (यह लाइन की संख्या है)
  • $8 आठ क्षेत्र है
  • && तार्किक है और
  • foo मूल फ़ाइल है, अपरिवर्तित है
  • bar परिणामी फ़ाइल
  • अंतर्निहित डिफ़ॉल्ट क्रिया वर्तमान इनपुट लाइन को प्रिंट करना है

ध्यान दें कि हेडर को रखने के लिए फू से बार तक पट्टी की जाती है

 awk '(NR==1) || ($8 > 2 ) ' foo > bar

कहाँ पे

  • || तार्किक है या
  • इनपुट लाइन मुद्रित होती है यदि NR == 1 या यदि $ 8> 2

अपडेट # 1

एक सीमा निर्दिष्ट करने के लिए

  • ( ($8 >= -4) && ( $8 <= 4 ) ) -4 से 4 तक 8 वें क्षेत्र
  • (NR == 1 ) || ( ($8 >= -4) && ( $8 <= 4 ) ) हैडर सहित

महान जवाब: सरल अभी तक पूरी तरह से, धन्यवाद। बस इसलिए मैं स्पष्ट हूं, इस मामले में एफएनआर और एनआर के बीच का अंतर कुछ भी नहीं है, सही है? मैंने उस आदमी पृष्ठ को पढ़ा है जहाँ यह बताता है: वर्तमान रिकॉर्ड का एनआर क्रमांक संख्या और वर्तमान फ़ाइल में वर्तमान रिकॉर्ड का एफएनआर क्रमांक संख्या। तो मैं समझता हूं कि इस मामले में वे बराबर हैं, मुझे लगता है :)
जियोक्रॉडिंग

यदि आपके पास एक फ़ाइल है, तो एफएनआर हमेशा एनआर होता है, अगर फ़ाइल 1 में 10 लाइनें हैं, तो फ़ाइल 2 की पहली पंक्ति में एनआर = 11 और एफएनआर = 1
आर्कमियर

हाय मैं कुछ ऐसा ही करना चाहता हूं लेकिन सब कुछ -4 से 4 के बीच में स्वीकार करता हूं। मैं यह करने के बारे में कैसे जाऊंगा, क्योंकि यह एकमात्र तरीका है जिसे मैं वर्तमान में जागृत करने के बारे में सोच सकता हूं '(एनआर == 1) || ($ 8 = [-4-4]) 'फू> बार
जाइल्स

1
awk गणित शैली रेंज के बारे में नहीं जानता, मेरा संपादन देखें।
14 मार्च को आर्किमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.