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

관련 정보