Добавление разделителя после каждого файла, обработанного в AWK
Вопрос
У меня есть несколько файлов, в которых я извлекаю текст между двумя разделителями (Start и Cond Inclusive). После того, как я обработал каждый файл, я хочу вывести разделитель, указывающий, что файл был обработан, скажем, строка «конец». Как я бы добавил строку «конец» к выходу после каждого обработанного файла? Например,
Скажем, у меня есть два файла с контентом
file1.txt
line 1
line 2
START
I want to extract this text
and this text
END
line 3
line 4
а также
file2.txt
line10
line20
START
I also want this text.
END
line 30
Я знаю, выполняю ли я следующее:
awk '/START/,/END/{if (!/START/&&!/END/) print}' test*.txt
Я получу следующий вывод:
I want to extract this text
and this text
I also want this text.
Но выход, который я хочу:
I want to extract this text
and this text
END
I also want this text.
END
Как мне добавить строку «конец» в выход после обработки каждого файла?
Решение
FNR==1 && NR!=1 {print "END"}
END {print "END"}
Итак, у вас есть:
awk 'FNR==1 && NR!=1 {print "END"} /START/,/END/{if (!/START/&&!/END/) print} END {print "END"}' test*.txt
Другие советы
Переменная FNR сбрасывается до 0 в каждом новом файле, поэтому у вас может быть триггер правил (fnr == 0 && nr! = 0):
(FNR==0) && (NR!=0) {
print "END"
}
END {
print "END"
}
Вы просите Awk пропустить конец печати. Прекрати это.
awk '/START/,/END/{if (!/START/) print}' test*.txt