아래에서 어려운 문제에 직면해 있습니다.
내 파일에 다음 텍스트가 있습니다.
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