특정 패턴이 일치하면 해당 테이블 이름을 가져옵니다.

특정 패턴이 일치하면 해당 테이블 이름을 가져옵니다.

아래 파일에서 특정 패턴이 발견되면 테이블 이름을 나열해야 합니다.

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포함 행 CCSIDCREATE 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

이를 수행하는 방법은 여러 가지가 있을 수 있지만 다음과 같습니다.

  1. 모든 새 줄을 제거하려면 tr을 사용하여 전체 파일을 하나의 긴 줄로 만듭니다.
  2. ;로 대체;\n 쿼리당 1개의 행을 배치합니다.
  3. 찾고 있는 쿼리를 찾기 위한 Grep
  4. 필요에 따라 결과 형식을 다시 지정합니다.

작동해야 하는 한 줄짜리 코드는 다음과 같습니다.

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'

관련 정보