2014-03-04 49 views
0

我具有以下串在一個稱爲文件ddl.txtAWK命令基於多個圖案串

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」 & '創造',但在不同的模式,(預期輸出

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這是在不同的模式搜索。

注意:務必要檢查圖案與關鍵字表格&匹配CREATE爲我所用上面的查詢;還DB是動態的......它並不總是DB

回答

1

這能否幫助?

$ 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 

更新

假設folllowing輸入:

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:

/CREATE.*TABLE/{ 
    t1[n++] = $5 
} 
/create table/{ 
    t2[k++] = $4 
} 
END{ 
    for (i=0; i<=n; i++) { 
     print t1[i], t2[i] 
    } 
} 

輸出:

$ awk -F'[ .]' -f t.awk input.txt 
TABLE1 dummy 
TABLE2 dummier 
+0

我可以具有不固定的表的n個。你能給我一個動態的解決方案嗎? – logan

+0

如果你更新你的問題讓我明白你需要:-) –

+0

我更新的問題是..還DB是動態的......它並不總是DB – logan

1

如果我得到你的意思,我這樣做:

$ 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」。圖案

+0

但在可能case'db'應該用作關鍵詞,因爲它可能會有所不同。我們可以用'.'但需要採取如果一個地方點來了...'請重構accordingly' – logan

+0

命令如果您知道關鍵字,您可以通過它來awk的,而不是「DB」。 – jrjc

+0

抱歉,我的意思是分貝不應該被用來作爲關鍵 – logan

1

下面是另一種方式與GNU awk

​​

輸出:

TABLE1 
dummy 
+0

但在可能情況下'db'應該用作關鍵詞,因爲它可能會有所不同。我們可以使用'。',但需要採取,如果某個地方點來了...'請相應地重新設置命令' – logan

+0

@標誌完成.... –