아래 파일에서 특정 패턴이 발견되면 테이블 이름을 나열해야 합니다.
CREATE TABLE IMS.ACTIVITY (
"ID" INTEGER NOT NULL ,
OWNING_TYPE FOR COLUMN OWNIN00001 VARCHAR(20) CCSID 37 NOT NULL ,
OWNING_ID INTEGER NOT NULL ,
ACTIVITY_TYPE FOR COLUMN ACTIV00001 VARCHAR(50) CCSID 37 NOT NULL ,
CAMPAIGN_TYPE FOR COLUMN CAMPA00001 VARCHAR(50) CCSID 37 NOT NULL ,
AUTHOR VARCHAR(100) CCSID 37 NOT NULL ,
COMPLETED TIMESTAMP NOT NULL ,
"COMMENT" VARCHAR(1000) CCSID 37 DEFAULT NULL ,
CUR_LOCN_STATUS FOR COLUMN CUR_L00001 VARCHAR(20) CCSID 37 DEFAULT NULL ,
FOLLOWUP_DATE FOR COLUMN FOLLO00001 DATE DEFAULT NULL ,
FOLLOWUP_EMAIL FOR COLUMN FOLLO00002 VARCHAR(300) CCSID 37 DEFAULT NULL ,
CREATETIMESTAMP FOR COLUMN CRTTIME TIMESTAMP DEFAULT NULL ,
CONSTRAINT IMS.QSYS_ACTIVITY_00001 PRIMARY KEY( "ID" ) )
;
CREATE TABLE IMS.ADDRESS (
"ID" INTEGER NOT NULL ,
PROVINCESTATE FOR COLUMN PROVI00001 VARCHAR(30) CCSID 37 DEFAULT NULL ,
CITY VARCHAR(30) CCSID 37 DEFAULT NULL ,
COUNTRY VARCHAR(30) CCSID 37 DEFAULT NULL ,
ADDRESSLINE1 FOR COLUMN ADDRE00001 VARCHAR(30) CCSID 37 DEFAULT NULL ,
ADDRESSLINE2 FOR COLUMN ADDRE00002 VARCHAR(30) CCSID 37 DEFAULT NULL ,
POSTALCODE VARCHAR(30) CCSID 37 DEFAULT NULL ,
CONSTRAINT IMS.QSYS_ADDRESS_00001 PRIMARY KEY( "ID" ) )
;
위 파일에서 검색하면 CCSID
포함 행 CCSID
과 CREATE TABLE
해당 행이 나열되어야 합니다 CCSIDs
.
출력은 다음과 같아야합니다
CREATE TABLE IMS.ACTIVITY
OWNING_TYPE FOR COLUMN OWNIN00001 VARCHAR(20) CCSID 37 NOT NULL
ACTIVITY_TYPE FOR COLUMN ACTIV00001 VARCHAR(50) CCSID 37 NOT NULL
CAMPAIGN_TYPE FOR COLUMN CAMPA00001 VARCHAR(50) CCSID 37 NOT NULL
AUTHOR VARCHAR(100) CCSID 37 NOT NULL
"COMMENT" VARCHAR(1000) CCSID 37 DEFAULT NULL
CUR_LOCN_STATUS FOR COLUMN CUR_L00001 VARCHAR(20) CCSID 37 DEFAULT NULL
FOLLOWUP_EMAIL FOR COLUMN FOLLO00002 VARCHAR(300) CCSID 37 DEFAULT NULL
다음 단락에서 () 안에 나타나는 경우 "table" 및 연관된 "CCSID"가 포함된 행을 인쇄합니다.
답변1
이를 수행하는 방법은 여러 가지가 있을 수 있지만 다음과 같습니다.
- 모든 새 줄을 제거하려면 tr을 사용하여 전체 파일을 하나의 긴 줄로 만듭니다.
- ;로 대체;\n 쿼리당 1개의 행을 배치합니다.
- 찾고 있는 쿼리를 찾기 위한 Grep
- 필요에 따라 결과 형식을 다시 지정합니다.
작동해야 하는 한 줄짜리 코드는 다음과 같습니다.
cat filename|tr -d '\n'|sed -e 's/;/;\n/g'|grep CCSID|sed -e 's/,/,\n/g'
출력에 테이블 작성 및 CCSID 컬럼만 포함하십시오.
cat filename|tr -d '\n'|sed -e 's/;/;\n/g'|grep CCSID|sed -e 's/,/,\n/g'|grep "CCSID\|CREATE TABLE"
수정했습니다. 두 번째 명령을 사용하면 잘못된 형식의 행이 표시됩니다. 다음은 업데이트된 명령입니다(약간 길지만 필터링된 DDSID의 수정된 데이터와 혼합하여 제공한 데이터를 기반으로 테스트했습니다).
cat testfile|tr -d '\n'|sed -e 's/;/;\n/g'|grep CCSID|sed -e 's/,/,\n/g'|grep "CCSID\|CREATE TABLE"|tr -d '\n'|sed -e 's/CREATE TABLE/;CREATE TABLE/g'|sed -e 's/,$/);/g'|sed -e 's/^;//g'|sed -e 's/,;/);/g'|sed -e 's/;/;\n/g'|sed -e 's/,/,\n/g'