特定のパターンが一致する場合は、対応するテーブル名を取得します。

特定のパターンが一致する場合は、対応するテーブル名を取得します。

以下のファイルで特定のパターンが見つかった場合は、テーブル名を一覧表示する必要があります。

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" ) )
        ;

上記のファイルを検索すると、インクルードCCSIDCCSIDCREATE 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

次の段落で()内に表示される場合は、「テーブル」と関連する「CCSID」を含む行を印刷します。

答え1

これを行うにはいくつかの方法がありますが、次のようになります。

  1. すべての新しい行を削除するには、trを使用してファイル全体を1つの長い行にします。
  2. ;で置換;\nクエリごとに1行を配置します。
  3. 探しているクエリを見つけるためのGrep
  4. 必要に応じて結果形式を再指定します。

機能する必要がある1行のコードは次のとおりです。

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"

修正しました。 2番目のコマンドを使用すると、誤った形式の行が表示されます。以下は、更新されたコマンドです(少し長いがフィルタリングされた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'

関連情報