我在名为 ddl.txt
的文件中有以下字符串CREATE SET TABLE DB.TABLE1 ,NO FALLBACK ,
NO BEFORE JOURNAL (
key DECIMAL(18,0);
drop table DB.dummy;
create table DB.dummy (id varchar(10));
我需要提取上面文件中的表名,如下所示,其中包含关键字“TABLE”和“CREATE”,但模式不同,(预期输出)
TABLE1
dummy
我试过的是,
a=`cat ddl.txt`
a=`echo "$a" | tr [a-z] [A-Z]`
echo "$a" | awk -v RS=, '/TABLE/&&/CREATE/{print $NF}' | awk -F'.' '{print $2}'
这只是返回
TABLE1
我需要在不同模式搜索中的其他表名 dummy
。
注意:我们应该始终检查模式是否与我在上面查询中使用的关键字 TABLE & CREATE 匹配;数据库也是动态的......它并不总是数据库
最佳答案
这是使用 GNU awk
的另一种方式:
awk '
BEGIN{IGNORECASE=1}
/create/&&/table/{for(i=1;i<=NF;i++) if($i~/[.]/){split($i,tmp,/\./); print tmp[2]}}' ddl.txt
输出:
TABLE1
dummy
关于linux - awk 命令根据多个模式字符串提取特定字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22175549/