2012-01-13 16 views
20

का उपयोग कर फ़ाइल की पहली दो पंक्तियों को हटाकर मैं फ़ाइल की पहली दो पंक्तियों को किसी अन्य फ़ाइल में प्रिंट न करके इसे हटाने की कोशिश कर रहा हूं। मैं कुछ फैंसी की तलाश नहीं कर रहा हूं। यहाँ मेरी (विफल) awk पर प्रयास है:बीएएसएच या अजीब या sed या किसी भी

awk '{ (NR > 2) {print} }' myfile 

निम्न त्रुटि बाहर फेंक कि:

awk: { NR > 2 {print} } 
awk:  ^syntax error 

उदाहरण:

'myFile' की सामग्री को:

blah 
blahsdfsj 
1 
2 
3 
4 

क्या मुझे परिणाम होना चाहिए:

1 
2 
3 
4 

उत्तर

51

उपयोग पूंछ:

tail -n+3 file 
आदमी पृष्ठ से

:

-n, --lines=K 
      output the last K lines, instead of the last 10; or use -n +K 
      to output lines starting with the Kth 
+4

+3 (3 लाइन पर शुरू होना चाहिए) होना चाहिए ... – cmbuckley

+0

'पूंछ-एन + 3 फ़ाइल' होना चाहिए, लेकिन धन्यवाद! – Amit

16

आप लगभग वहाँ रहे हैं। ऐसा करें:

awk 'NR > 2 { print }' myfile 

awk नियम आधारित है, और शासन नंगे दिखाई देता है (अर्थात, ब्रेसिज़ के बिना) ब्लॉक निष्पादित woud अगर यह गुज़रने से पहले।

के रूप में भी Jaypal awk में बताया गया है, अगर सब आप क्या करना चाहते प्रिंट लाइन है कि नियमों से मेल खाता है तुम भी कार्रवाई को छोड़ सकते हैं है, इस प्रकार के आदेश को सरल बनाने: के बारे में

awk 'NR > 2' myfile 
+0

वह ब्रांड्स से पहले 'if' भी डाल सकता है, हालांकि आपका तरीका बेहतर है, क्योंकि यह प्रत्येक पंक्ति को संलग्न नहीं करता है, केवल वे पहले से मेल खाते हैं। –

+1

आपको '{print}' की भी आवश्यकता नहीं है। 'अजीब' रास्ता 'अजीब' होगा एनआर> 2 'मायफाइल' –

20

कैसे:

tail +3 file 

या

awk 'NR>2' file 

या

sed '1,2d' file 
+1

sed का एक और संस्करण: 'sed -n' 3, $ p 'file' – anubhava

4

awkpattern{action} कथन पर आधारित है। आपके मामले में, patternNR>2 और action है जो आप करना चाहते हैं print है। यह actiondefault actionawk भी है।

तो भले ही

awk 'NR>2{print}' filename

ठीक काम करेगा, तो आप इसे

awk 'NR>2' filename को छोटा कर सकते हैं।