Linux 基于多模式字符串提取特定字符串的awk命令

Linux 基于多模式字符串提取特定字符串的awk命令,linux,bash,shell,unix,awk,Linux,Bash,Shell,Unix,Awk,我在一个名为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)); TABLE1 dummy 我需要按如下方式提取上述文件中的表名,其中包含关键字“table”和“CREATE”,但模式不同(预期输出) 我试

我在一个名为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));
TABLE1
dummy
我需要按如下方式提取上述文件中的表名,其中包含关键字“table”和“CREATE”,但模式不同(预期输出

我试过的是

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匹配;数据库也是动态的。。。它并不总是DB

这会有帮助吗

$ cat t.awk
/CREATE.*TABLE/{table1=$5}
/create table/{table2=$4}
END{
    print table1
    print table2
}

$ awk -F'[ .]' -f t.awk input.txt
TABLE1
dummy
更新

假设以下输入:

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

CREATE SET TABLE BD.TABLE2 ,NO FALLBACK ,
     NO BEFORE JOURNAL (
      key DECIMAL(18,0);

drop table BD.dummier;
create table BD.dummier (id varchar(10));
awk:

这有用吗

$ cat t.awk
/CREATE.*TABLE/{table1=$5}
/create table/{table2=$4}
END{
    print table1
    print table2
}

$ awk -F'[ .]' -f t.awk input.txt
TABLE1
dummy
更新

假设以下输入:

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

CREATE SET TABLE BD.TABLE2 ,NO FALLBACK ,
     NO BEFORE JOURNAL (
      key DECIMAL(18,0);

drop table BD.dummier;
create table BD.dummier (id varchar(10));
awk:

这有用吗

$ cat t.awk
/CREATE.*TABLE/{table1=$5}
/create table/{table2=$4}
END{
    print table1
    print table2
}

$ awk -F'[ .]' -f t.awk input.txt
TABLE1
dummy
更新

假设以下输入:

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

CREATE SET TABLE BD.TABLE2 ,NO FALLBACK ,
     NO BEFORE JOURNAL (
      key DECIMAL(18,0);

drop table BD.dummier;
create table BD.dummier (id varchar(10));
awk:

这有用吗

$ cat t.awk
/CREATE.*TABLE/{table1=$5}
/create table/{table2=$4}
END{
    print table1
    print table2
}

$ awk -F'[ .]' -f t.awk input.txt
TABLE1
dummy
更新

假设以下输入:

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

CREATE SET TABLE BD.TABLE2 ,NO FALLBACK ,
     NO BEFORE JOURNAL (
      key DECIMAL(18,0);

drop table BD.dummier;
create table BD.dummier (id varchar(10));
awk:


如果我明白你的意思,我会这样做:

$ cat a
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));

$ kw="DB." # you can set kw according to what happens previously
$ awk -F"$kw" '(($0~/table/ || $0~/TABLE/) && ($0~/create/ || $0~/CREATE/)){print $2}' a | awk '{print $1}'

 TABLE1
 dummy

我假设名称总是在“DB”之后。模式

如果我明白你的意思,我会这样做:

$ cat a
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));

$ kw="DB." # you can set kw according to what happens previously
$ awk -F"$kw" '(($0~/table/ || $0~/TABLE/) && ($0~/create/ || $0~/CREATE/)){print $2}' a | awk '{print $1}'

 TABLE1
 dummy

我假设名称总是在“DB”之后。模式

如果我明白你的意思,我会这样做:

$ cat a
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));

$ kw="DB." # you can set kw according to what happens previously
$ awk -F"$kw" '(($0~/table/ || $0~/TABLE/) && ($0~/create/ || $0~/CREATE/)){print $2}' a | awk '{print $1}'

 TABLE1
 dummy

我假设名称总是在“DB”之后。模式

如果我明白你的意思,我会这样做:

$ cat a
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));

$ kw="DB." # you can set kw according to what happens previously
$ awk -F"$kw" '(($0~/table/ || $0~/TABLE/) && ($0~/create/ || $0~/CREATE/)){print $2}' a | awk '{print $1}'

 TABLE1
 dummy

我假设名称总是在“DB”之后。pattern

这里是GNU awk的另一种方式:

awk '
BEGIN{IGNORECASE=1}
/create/&&/table/{for(i=1;i<=NF;i++) if($i~/[.]/){split($i,tmp,/\./); print tmp[2]}}' ddl.txt

下面是GNU awk的另一种方式:

awk '
BEGIN{IGNORECASE=1}
/create/&&/table/{for(i=1;i<=NF;i++) if($i~/[.]/){split($i,tmp,/\./); print tmp[2]}}' ddl.txt

下面是GNU awk的另一种方式:

awk '
BEGIN{IGNORECASE=1}
/create/&&/table/{for(i=1;i<=NF;i++) if($i~/[.]/){split($i,tmp,/\./); print tmp[2]}}' ddl.txt

下面是GNU awk的另一种方式:

awk '
BEGIN{IGNORECASE=1}
/create/&&/table/{for(i=1;i<=NF;i++) if($i~/[.]/){split($i,tmp,/\./); print tmp[2]}}' ddl.txt



但在可能的情况下,
db
应作为关键字使用,因为它可能会有所不同。我们可以使用
,但如果dot要到某个地方,我们需要采取行动
请相应地重新编写命令
,但在可能的情况下,
db
应作为关键字使用,因为它可能会有所不同。我们可以使用
,但如果dot要到某个地方,我们需要采取行动
请相应地重新编写命令
,但在可能的情况下,
db
应作为关键字使用,因为它可能会有所不同。我们可以使用
,但如果dot要到某个地方,我们需要采取行动
请相应地重新编写命令
,但在可能的情况下,
db
应作为关键字使用,因为它可能会有所不同。我们可以使用
,但如果dot要到某个地方,我们需要采取行动
请相应地重新编写命令
,但在可能的情况下,
db
应作为关键字使用,因为它可能会有所不同。我们可以使用
,但如果dot要到某个地方,我们需要采取行动
请相应地重新编写命令
如果您知道关键字,您可以将其传递给awk而不是“DB”。对不起,我的意思是DB不应用作键为什么不?编辑后,你可以很容易地用你想要的关键字修改DB。DB是动态字;只有CREATE和TABLE是静态的,但在可能的情况下,
db
应作为关键字使用,因为它可能会有所不同。我们可以使用
,但如果dot要到某个地方,我们需要采取行动
请相应地重新编写命令
如果您知道关键字,您可以将其传递给awk而不是“DB”。对不起,我的意思是DB不应用作键为什么不?编辑后,你可以很容易地用你想要的关键字修改DB。DB是动态字;只有CREATE和TABLE是静态的,但在可能的情况下,
db
应作为关键字使用,因为它可能会有所不同。我们可以使用
,但如果dot要到某个地方,我们需要采取行动
请相应地重新编写命令
如果您知道关键字,您可以将其传递给awk而不是“DB”。对不起,我的意思是DB不应用作键为什么不?编辑后,你可以很容易地用你想要的关键字修改DB。DB是动态字;只有CREATE和TABLE是静态的,但在可能的情况下,
db
应作为关键字使用,因为它可能会有所不同。我们可以使用
,但如果dot要到某个地方,我们需要采取行动
请相应地重新编写命令
如果您知道关键字,您可以将其传递给awk而不是“DB”。对不起,我的意思是DB不应用作键为什么不?编辑后,你可以很容易地用你想要的关键字修改DB。DB是动态字;只有CREATE和TABLE是静态的。我可能有n个表,但不是固定的。你能给我一个动态的解决方案吗?是的,如果你更新你的问题以便我了解你需要什么:-)我更新了问题。。数据库也是动态的。。。DBI可能有n个不固定的表,但并不总是如此。你能给我一个动态的解决方案吗?是的,如果你更新你的问题以便我了解你需要什么:-)我更新了问题。。数据库也是动态的。。。DBI可能有n个不固定的表,但并不总是如此。你能给我一个动态的解决方案吗?是的,如果你更新你的问题以便我了解你需要什么:-)我更新了问题。。数据库也是动态的。。。DBI可能有n个不固定的表,但并不总是如此。你能给我一个动态的解决方案吗?是的,如果你更新你的问题以便我了解你需要什么:-)我更新了问题。。数据库也是动态的。。。它并不总是DB