我在下面面临一个具有挑战性的问题
我的文件中有以下文本:
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