
以下の難しい問題に直面しています。
私のファイルには次のテキストがあります。
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行の上の1行の列を印刷できますが、このコマンドはその行の単一の列のみを印刷しますが、行全体を印刷したいと思います。
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
2番目のフィールドは
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