2012-01-13 23 views
20

kullanarak siliyorum Bir dosyanın ilk iki satırını başka bir dosyaya yazdırmayarak silmeye çalışıyorum. Fantezi bir şey aramıyorum. İşte awk benim (başarısız) denemesi:Bir dosyanın ilk iki satırını BASH veya awk veya sed veya

aşağıdaki hatayı dışarı atar
awk '{ (NR > 2) {print} }' myfile 

:

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

Örnek: 'Dosyam' arasında

içeriği:

blah 
blahsdfsj 
1 
2 
3 
4 

neler Sonucun olmasını istiyorum:

1 
2 
3 
4 

cevap

51

Kullanım kuyruk: man sayfasından

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 olmalıdır (3.hatta başlar) ... – cmbuckley

+0

"tail -n + 3 file" olması gerekir, ama teşekkürler! – Amit

16

Neredeyse geldin. Bunun yerine bu deneyin:

awk 'NR > 2 { print }' myfile 

awk kural tabanlı ve kural geçerse o yürütmek woud bloğundan önce (yani parantez olmadan) çıplak görünür. nereden

awk 'NR > 2' myfile 
+0

Ayrıca, parantezden önce bir "if" koyabiliyordu, ancak yolunuz daha iyi olsa da, her çizgiyi meşgul etmediği için, zaten eşleşenler. –

+1

"print" 'a ihtiyacınız bile yok. 'awkish' yolu 'awk' olurdu NR> 2 'myfile' –

20

: Ayrıca yapmak istediğiniz tüm yazdırma böylece için komutu basitleştirerek, hatta eylem atlayabilirsiniz kuralla eşleşen çizgi ise Jaypal awk 'de işaret ettiği gibi

:

tail +3 file 

VEYA

awk 'NR>2' file 

VEYA

+1

Bir başka varyant sed:' sed -n '3, $ p' dosya ' – anubhava

4

awk, pattern{action} hesaplarına dayalıdır. Sizin durumunuzda, patternNR>2 ve gerçekleştirmek istediğiniz actionprint olduğunu. Bu action, awk'un default action'udur.

awk 'NR>2{print}' filename

iyi çalışacak Yani bile bile,

awk 'NR>2' filename kadar kısaltın olabilir.

İlgili konular