Как я могу пропустить первые 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
.
.
.

1 ответ1

1

Использование:

BEGIN {
} 

NR>6{ 
process here
} 

END {

}

В awk NR - номер строки. Чтобы пропустить обработку первых шести, добавим условие NF>6 . Когда это условие ложно, то есть для первых шести строк, строки не обрабатываются.

Обработка нескольких файлов

Предположим, что у нас есть папка с текстовыми файлами с именами от 000.txt до 181.txt. Вот пример обработки всех их одним и тем же сценарием awk и отправки их в соответствующие выходные файлы (output000.txt - output181.txt):

awk 'NR>6{print>("output" FILENAME)}' {000..181}.txt

Если мы используем bash , то {000..181}.txt расширится до имен наших 182 входных файлов.

В awk (для этого может потребоваться GNU awk), FILENAME - это имя входного файла, над которым в данный момент работает awk. Таким образом ("output" FILENAME) - это имя нашего текущего выходного файла.

Предназначенный просто в качестве примера, вышеприведенный просто печатает все, кроме первых шести строк входного файла, в выходной файл. Более сложные программы будут использовать те же принципы.

Дополнительно: для обработки каждого файла в каталоге, независимо от его имени, используйте:

awk 'NR>6{print>("output" FILENAME)}' *

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .