获取 grep 行下方的特定行

获取 grep 行下方的特定行

我在下面面临一个具有挑战性的问题

我的文件中有以下文本:

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;

我的目标是 grep 文本文件中的以下行:

create table "ctronsys".activity_codes

并使用上面的内容检索下面的行:

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

注意下面搜索的行数并不是根据表结构具体的

我有下面的命令,它允许我使用 awk 在 grep 行上方的一行中打印一列,但是这只打印该行中的单个列,而我想打印整行:

cat table_structure | awk -v key="datadbs" '/^create/ {val=$3} $3 == key {print val;}'

答案1

使用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

我们将文件内容划分为;分隔的记录。每条记录根据行开头的(或分为多个字段。)

读取文件时,第一条记录将是该特定文件的完整内容。

该记录的第一个字段是

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

相关内容