Awk वाली टेक्स्ट फ़ाइल में पहले 6 पंक्तियों / पंक्तियों को छोड़ें


39

मैं टेक्स्ट फ़ाइल (input.txt) में पहले 6 लाइनों / पंक्तियों को कैसे छोड़ सकता हूं और बाकी को awk के साथ संसाधित कर सकता हूं? मेरी awk स्क्रिप्ट का प्रारूप (program.awk) है:

BEGIN {
} 

{ 
process here
} 

END {

}

मेरी पाठ फ़ाइल इस प्रकार है:

0
3
5
0.1 4.3
2.0 1.5
1.5 3.0
0.3 3.3
1.5 2.1
.
.
.

मैं फ़ाइल की प्रक्रिया शुरू करना चाहता हूँ:

0.3 3.3
1.5 2.1
.
.
.

जवाबों:


59

दोनों में से किसी एक पैटर्न का उपयोग करें:

NR>6 { this_code_is_active }

या यह:

NR<=6 { next }
{ this_code_is_active }

NR के बजाय FNR का उपयोग करें यदि आपके पास जागरण के लिए तर्क के रूप में कई फाइलें हैं और हर फाइल में 6 लाइनों को छोड़ना चाहते हैं।


29

प्रयत्न:

awk 'FNR > 6 { #process here }' file

4
अच्छा! लेकिन आपने यह नहीं बताया कि यह बेहतर क्यों है - कई फ़ाइलों FNRके लिए प्रत्येक फ़ाइल में पंक्ति संख्या होती है, जबकि NRपूरे इनपुट में संख्या होती है (पाइपिंग करते समय कोई समस्या नहीं)।
टॉमाज़ गैंडर

3

आप फ़ाइल के उपयोग headया tailकार्यक्रमों के आरंभ में या अंत में एक अनियंत्रित संख्या को छोड़ सकते हैं ।

आपके ठोस प्रश्न के लिए,

tail input.txt -n+7 | program.awk

करेगा, बशर्ते आपकी program.awkफ़ाइल निष्पादन योग्य हो। अन्यथा, आप उपयोग कर सकते हैं

tail input.txt -n+7 | awk -f program.awk

इस तरह, आप प्रत्येक पंक्ति के लिए एक तुलना छोड़ देंगे और आपको अपने AWK कोड के तर्क को बदलने की आवश्यकता नहीं है।

tail पाठ को सातवीं पंक्ति से शुरू करना शुरू कर देगा, छह पहली पंक्तियों को छोड़ देगा।

यह प्रदर्शन में बहुत बड़ा सौदा नहीं होगा, खासकर अगर पाठ प्रक्रिया कैशिंग के लिए सरल है। हालांकि, लंबी फ़ाइलों के लिए और क्लाउड वातावरण में बार-बार उपयोग से कुछ लागत बच सकती है।


सही, लेकिन अंगूठे के एक नियम के रूप में, आपको पाइपिंग से बचना चाहिए जब आप इसे आसानी से अकेले एक उपकरण के साथ कर सकते हैं। कुछ ही लाइनों को हटाने के लिए दोनों कमांड के माध्यम से एक विशाल टेक्स्ट फ़ाइल पाइपिंग के बारे में सोचें।
फिलिप्प्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.