【发布时间】:2020-08-21 20:28:27
【问题描述】:
我在文件中提取了多个表定义(每个文件一个定义),并且我试图从表定义中获取特定属性。表属性可以是 SET 或 MULTISET,表定义可以是 like
CREATE MULTISET TABLE WEB_APP_OWN_TABLES.VARS_WRK ,NO FALLBACK ,
或
CREATE SET TABLE WEB_APP_OWN_TABLES.VARS ,NO FALLBACK ,
CREATE 和 MULTISET/SET 之间可以有多个空格和/或制表符
MULTISET/SET 和 TABLE 之间可以有多个空格和/或制表符
单词之间的空格和/或制表符的数量可能因每个定义而异。我使用下面的命令来获取属性,但它可以给我列名,例如“CREATE_BY_TABLE”。有没有更好的方法来做到这一点?
*egrep -i "\<CREATE\>\*.\*\<TABLE\>" WEB_APP_OWN_TABLES~VARS_WRK.sql | egrep -i "SET|MULTISET"*
示例表定义:
*
CREATE SET TABLE DB_NAME.TABLE_NAME ,NO FALLBACK ,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT,
DEFAULT MERGEBLOCKRATIO,
MAP = TD_MAP2
(
databasename VARCHAR(128) CHARACTER SET LATIN NOT CASESPECIFIC,
tablename VARCHAR(128) CHARACTER SET LATIN NOT CASESPECIFIC,
currentperm BIGINT,
peakperm BIGINT,
collectdate DATE FORMAT 'yyyy-mm-dd',
collecttime INTEGER)
UNIQUE PRIMARY INDEX ( databasename ,tablename ,collectdate ,
collecttime );
*
【问题讨论】:
-
你能显示示例输入、你的命令的结果和你想要的结果吗?当您
grep -i "SET"时,您也会找到 MULTISET。 -
CREATE SET TABLE
. ,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT, DEFAULT MERGEBLOCKRATIO, MAP = TD_MAP2 ( databasename VARCHAR(128) CHARACTER SET LATIN NOT CASESPECIFIC, tablename VARCHAR(128) CHARACTER SET LATIN NOT CASESPECIFIC, currentperm BIGINT, peakperm BIGINT, collectdate DATE FORMAT 'yyyy-mm-dd', collecttime INTEGER) 唯一主索引 ( databasename ,tablename ,collectdate , collecttime ); -
该文件可能在其他位置有 SET 这个词,就像上面的评论一样
-
嗨 Raza,我希望看到示例输出作为您问题的一部分(您可以编辑)。 AFAIK 你想要
egrep -i "CREATE.*SET.*TABLE" WEB_APP_OWN_TABLES~VARS_WRK.sql但我无法测试你的样本输入并将我的结果与你的示例输出(要求)进行比较。