Пропустите первые 6 строк / строк в текстовом файле с помощью awk


39

Как я могу пропустить первые 6 строк / строк в текстовом файле (input.txt) и обработать остальные с помощью 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
.
.
.

Ответы:


60

Используйте любой из двух шаблонов:

NR>6 { this_code_is_active }

или это:

NR<=6 { next }
{ this_code_is_active }

Используйте FNR вместо NR, если у вас есть много файлов в качестве аргументов для awk и вы хотите пропустить 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 и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.