以下のファイルで特定のパターンが見つかった場合は、テーブル名を一覧表示する必要があります。
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
次の段落で()内に表示される場合は、「テーブル」と関連する「CCSID」を含む行を印刷します。
答え1
これを行うにはいくつかの方法がありますが、次のようになります。
- すべての新しい行を削除するには、trを使用してファイル全体を1つの長い行にします。
- ;で置換;\nクエリごとに1行を配置します。
- 探しているクエリを見つけるためのGrep
- 必要に応じて結果形式を再指定します。
機能する必要がある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'