Obtenha linha específica abaixo da linha grepped

1

Eu tenho um problema desafiador que estou enfrentando abaixo

Eu tenho o texto abaixo em um arquivo:

create table "ctronsys".activity_codes
(
   code_list_id varchar(8),
   code_id varchar(10),
   record_type varchar(1),
   active_status_ind varchar(1),
   security_level varchar(1),
   short_description varchar(10),
   long_description varchar(30),
   record_class varchar(1),
   owner_id varchar(4),
   modify_user_id varchar(3),
   modify_date date,
   create_user_id varchar(3),
   create_date date
) in datadbs extent size 16 next size 16 lock mode row;

Meu objetivo é buscar a linha abaixo no arquivo de texto:

create table "ctronsys".activity_codes

e usando o acima para recuperar a linha abaixo:

) in datadbs extent size 16 next size 16 lock mode row;

Observe que o número de linhas a pesquisar abaixo não é específico de acordo com as estruturas de tabela

Eu tenho o comando abaixo, que me permite imprimir uma coluna dentro de uma linha acima da linha grepped usando awk, no entanto isso só imprime uma única coluna dentro dessa linha, enquanto eu gostaria de imprimir a linha inteira:

cat table_structure | awk -v key="datadbs" '/^create/ {val=$3} $3 == key {print val;}'
    
por Christopher Karsten 02.05.2017 / 16:27

1 resposta

3

Usando awk :

awk 'BEGIN { FS="\n[()]"; RS=";" } /^create table "ctronsys".activity_codes/ { print $NF }' file
 in datadbs extent size 16 next size 16 lock mode row

Nós dividimos o conteúdo do arquivo em registros ; -separados. Cada registro é dividido em campos com base no ( ou ) no início de uma linha.

Ao ler o arquivo, o primeiro registro será o conteúdo completo deste arquivo em particular.

O primeiro campo desse registro é

create table "ctronsys".activity_codes

O segundo campo é

   code_list_id varchar(8),
   code_id varchar(10),
   record_type varchar(1),
   active_status_ind varchar(1),
   security_level varchar(1),
   short_description varchar(10),
   long_description varchar(30),
   record_class varchar(1),
   owner_id varchar(4),
   modify_user_id varchar(3),
   modify_date date,
   create_user_id varchar(3),
   create_date date

E o último campo é

 in datadbs extent size 16 next size 16 lock mode row
    
por 02.05.2017 / 16:43