如果从下面的文件中找到特定模式,我需要列出表名称。
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 删除所有新行,使整个文件成为一长行。
- 代替 ; with ;\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'