![](/img/trans.png)
[英]Is there a way to use regex with awk to execute a command only when the pattern is matched?
[英]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
是一个正则表达式,它查看包含单词TABLE
和CREATE
。 您可以包括单词边界以仅匹配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.