извлечь набор строк с использованием разделителя из файла в UNIX

#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