Bir metin dosyasındaki ilk 6 satırı / satırları awk ile atla


39

Bir metin dosyasındaki ilk 6 satırı / satırı nasıl atlayabilirim (input.txt) ve gerisini awk ile nasıl işlerim? Awk betiğimin (program.awk) formatı şudur:

BEGIN {
} 

{ 
process here
} 

END {

}

Metin dosyam şöyle:

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

Dosyayı şu kaynaktan başlayarak işlemek istiyorum:

0.3 3.3
1.5 2.1
.
.
.

Yanıtlar:


59

İki düzenden birini kullanın:

NR>6 { this_code_is_active }

veya bu:

NR<=6 { next }
{ this_code_is_active }

Awk için argüman olarak birçok dosyanız varsa ve her dosyada 6 satır atlamak istiyorsanız, NR yerine FNR kullanın.


29

Deneyin:

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

4
İyi! Ancak bunun neden daha iyi olduğunu açıklamamışsınız - birden fazla dosya FNRiçin her dosyadaki satır sayısı NR, tüm girdideki sayı ise (piping yaparken bir sorun değil).
Tomasz Gandor

3

Ayrıca, programları headveya tailprogramları kullanarak dosyanın başında veya sonunda rasgele sayıda satır atlayabilirsiniz .

Somut sorunuz için

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

program.awkDosyanızın çalıştırılabilir olması şartıyla bunu yapacağız . Aksi takdirde, kullanabilirsiniz

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

Bu şekilde, her satır için bir karşılaştırma yapacaksınız ve AWK kodunuzun mantığını değiştirmenize gerek kalmayacak.

tail yedinci satırdan başlayarak ilk altı satırı atlayarak metnin akışını başlatır.

Bu, özellikle metin işlemi önbelleğe alma sayesinde basitse, performansta büyük bir sorun olmayacaktır. Ancak, uzun dosyalar ve bulut ortamında tekrar tekrar kullanılması, maliyetten tasarruf sağlayabilir.


Doğru, ancak kural olarak, tek bir aletle kolayca yapabileceğiniz zaman boru kullanmaktan kaçınılmalıdır. Birkaç satırı kaldırmak için her iki komutta da büyük bir metin dosyası oluşturmayı düşünün.
Philippos
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.