我有以下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
...

最佳答案

您的示例数据并不重要,但您可以尝试以下想法:

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保存最后一个字段的值。
$ echo "CREATE TABLE T1, is my TABLE but CREATE my TABLE T2, is table" | awk -v RS=, '/TABLE/&&/CREATE/{print $NF}'
T1
T2

关于linux - unix awk命令未列出多个匹配的模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22097429/

10-14 14:27
查看更多