Несколько основных (построчных блоков) в AWK
Подскажите, возможно ли в одном выводе AWK сформировать несколько выходных таблиц? Знаю, что можно делать несколько блоков BEGIN и END в одном запросе, но про основной блок не встречал подобную информацию.
Пример к которому стремлюсь
BEGIN {print "HEAD"}
{print "Строки обособленной таблицы №1}
{print "Строки обособленной таблицы №2}
END {print "FOOTER"}
Этот пример выводит две таблицы в одной со строками в перемешку. А нужно чтобы выводилось две обособленные таблицы.
Ответы (1 шт):
AWK - однопроходный процессор, он выводит сразу по завершению блока. Поэтому нужны хитрости, если вы хотите создавать сразу две таблицы.
Я вижу как минимум два варианта:
Разные таблицы печатаются в разные файлы:
BEGIN { print "HEAD" >> "t1.html"; print "HEAD" >> "t2.html" } {print "Строки обособленной таблицы №1" >> "t1.html"} {print "Строки обособленной таблицы №2" >> "t2.html" } END { print "FOOTER" >> "t1.html"; print "FOOTER" >> "t2.html"; }Строки разных таблиц печатаются с разными префиксами, затем при помощи
teeиsedвывод разбирается в несколько файловBEGIN { print "HEAD" } { print "1::Таблица 1" } { print "2::Таблица 2" } END { print "FOOTER" }Вызов:
command |\ awk -f some.awk |\ tee \ >(sed -e '/^1::/d;s/^[0-9]\+:://' > f2.html)\ >(sed -e '/^2::/d;s/^[0-9]\+:://' > f1.html)Здесь
teeперенаправляет один поток в несколько команд для обработки. Каждая команда делает одно и то же:/^1::/d- эта команда говоритsed, что нужно игнорировать строки, начинающиеся с1::s/^[0-9]\+:://- выполняя эту командуsedудаляет префиксы строк.
В результате в
f1.htmlбудетHEAD Таблица 1 FOOTERа в
f2.html, соответственноHEAD Таблица 2 FOOTER