【问题标题】:awk: Elegant way to fetch the word after a separatorawk:在分隔符后获取单词的优雅方式
【发布时间】:2010-12-05 14:38:43
【问题描述】:

考虑以下数据库架构:

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 之后并以( 或空格结尾的单词。

知道如何使用正则表达式匹配而不遍历所有$NFs 吗?

【问题讨论】:

  • 根据您的规范,第三行应为blah3, table3 USING btree(以“(”)结尾

标签: regex awk


【解决方案1】:

我不太了解 awk,但这似乎可行:

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

【讨论】:

  • 太棒了。添加了 /CREATE/ && /INDEX/' before {gsub...` 以仅匹配架构中的相应行。
【解决方案2】:
sed 's/.*INDEX \([^ ]*\) ON \([^( ]*\)[( ].*/\1, \2/' inputfile

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

【讨论】:

    【解决方案3】:

    非常适合 Perl 单行。

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

    返回你想要的。

    【讨论】:

      猜你喜欢
      • 2013-11-14
      • 2023-03-31
      • 1970-01-01
      • 2012-02-19
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 2014-09-01
      相关资源
      最近更新 更多