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行の上の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

おすすめ記事