繁体   English   中英

unix awk命令未列出多个匹配的模式

[英]unix awk command not listing multiple matched pattern

我有以下unix变量模式。 我想基于'CREATE' , 'TABLE' & ','模式进行搜索和输出

a ="CREATE TABLE T1, is my TABLE but , DROP TABLE is not CREATE my TABLE T2, is table" # it may keep going but pattern is same ....
echo $a | awk -F'CREATE' '{print $2}' | awk -F'TABLE' '{print $2}' | awk -F',' '{print $1}'

输出

T1

我要列印

T1
T2
...

使用grep会更容易:

grep -oP 'CREATE .*?TABLE \K\w+' <<< "$a"
T1
T2

您的样本数据并不重要,但是您可以尝试以下想法:

awk -v RS=, '/TABLE/&&/CREATE/{print $NF}'

阐释:

  • 我们设置Record Separator, ,所以它分裂在每行,它看到。 结果,您的输入行被视为:

    CREATE TABLE T1

    is my TABLE but CREATE my TABLE T2

    is table

  • /TABLE/&&/CREATE是一个正则表达式,它查看包含单词TABLECREATE 您可以包括单词边界以仅匹配TABLE而不匹配CONSTABLE

  • print $NF表示打印最后一个字段。 NF是一个特殊的awk变量,其中包含字段数,而$NF保存最后一个字段的值。

$ echo "CREATE TABLE T1, is my TABLE but CREATE my TABLE T2, is table" | awk -v RS=, '/TABLE/&&/CREATE/{print $NF}'
T1
T2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM