#unix #awk #sed #pattern-matching #text-extraction
#unix #awk #sed #сопоставление с шаблоном #извлечение текста
Вопрос:
У меня есть ниже 3 запросов в одном плоском файле. я хочу извлечь 1 запрос из входного файла (например, 2-й запрос) за раз. Разделителем для каждого запроса является «;» (точка с запятой). Пожалуйста, подскажите, как я могу это сделать?
входной файл: query.sql
select * from
DBNAME.table1;
select * from
DBNAME.table2
;
select * from
DBNAME.table3
WHERE date<= current_date-30;
вывод должен быть
Выходной файл: query_out.sql
select * from
DBNAME.table2
;
Ответ №1:
Вы можете использовать это awk
,
awk 'BEGIN{RS=";"} NR==2{print $0}' yourfile.sql > output.sql
Ответ №2:
ответ sat не обрезает пустые строки между двумя sql-запросами и не выводит точку с запятой, заканчивающую запрос.
При условии, что вы используете gawk (или любую разновидность awk, позволяющую RS быть регулярным выражением), следующее, вероятно, будет соответствовать вашим потребностям:
awk 'BEGIN {RS=";[[:space:]]*"} NR==2 {printf "%s;n",$0}' yourfile.sql