Lewati 6 baris / baris pertama dalam file teks dengan awk


39

Bagaimana saya bisa melewatkan 6 baris / baris pertama dalam file teks (input.txt) dan memproses sisanya dengan awk? Format skrip awk saya (program.awk) adalah:

BEGIN {
} 

{ 
process here
} 

END {

}

File teks saya seperti ini:

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

Saya ingin memproses file mulai dari:

0.3 3.3
1.5 2.1
.
.
.

Jawaban:


59

Gunakan salah satu dari dua pola ini:

NR>6 { this_code_is_active }

atau ini:

NR<=6 { next }
{ this_code_is_active }

Gunakan FNR daripada NR jika Anda memiliki banyak file sebagai argumen untuk awk dan ingin melewati 6 baris di setiap file.


29

Mencoba:

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

4
Baik! Tapi Anda tidak menjelaskan mengapa ini lebih baik - untuk banyak file FNRadalah nomor baris di setiap file, sedangkan NRnomor di seluruh input (bukan masalah saat perpipaan).
Tomasz Gandor

3

Anda juga dapat melewati sejumlah baris yang sewenang-wenang di awal atau akhir file menggunakan headatau tailprogram.

Untuk pertanyaan konkret Anda,

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

akan melakukannya, asalkan program.awkfile Anda dapat dieksekusi. Jika tidak, Anda dapat menggunakan

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

Dengan cara ini, Anda akan memberikan perbandingan untuk setiap baris dan Anda tidak perlu mengubah logika kode AWK Anda.

tail akan mulai streaming teks mulai dari baris ketujuh, melewatkan enam baris pertama.

Ini tidak akan menjadi masalah besar dalam kinerja, terutama jika proses teks sederhana berkat caching. Namun, untuk file yang panjang dan penggunaan berulang di lingkungan cloud dapat menghemat biaya.


Benar, tetapi sebagai aturan praktis, seseorang harus menghindari perpipaan ketika Anda dapat dengan mudah melakukannya dengan satu alat saja. Pikirkan perpipaan file teks besar melalui kedua perintah hanya untuk menghapus beberapa baris.
Philippos
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.