awk:在分隔符后获取单词的优雅方式

时间:2010-12-04 13:01:09

标签: regex awk

考虑以下数据库架构:

CREATE UNIQUE INDEX blah1 ON table1(length);
CREATE INDEX blah2 ON table3(name);
CREATE INDEX blah3 ON table3 USING btree(id);

我想编写一个小的awk脚本,它将返回索引和表的名称,例如:

 blah1, table1
 blah2, table2
 blah3, table3

我需要匹配单词INDEX后面的单词和单词ON后面的单词并以(或空格结尾。

任何想法如何使用正则表达式匹配,而不迭代所有$NF

3 个答案:

答案 0 :(得分:1)

我不太清楚,但这似乎有效:

awk 'BEGIN{ FS="INDEX | ON "}{gsub(/[ (].*/,"",$3); print $2", " $3}' test.dat

答案 1 :(得分:0)

sed 's/.*INDEX \([^ ]*\) ON \([^( ]*\)[( ].*/\1, \2/' inputfile

awk '{sub(".*INDEX ","");sub(" ON ",",");sub("[( ].*",""); sub(",",", ");print}' inputfile

答案 2 :(得分:0)

使用Perl单行程序很好用。

cat file | perl -ne '/INDEX ([a-zA-Z0-9]+) ON ([a-zA-Z0-9]+)/ && print "$1, $2\n";'

返回您想要的内容。