需要帮助AWK脚本吗

需要帮助AWK脚本吗,awk,Awk,您能告诉我如何通过awk在下面的文本中打印“user.%”字符串吗? “user”的值不固定,“()”中的字符串数不固定 start user1.table% NOT (%OLD, %2016%) user.% another strings 更新 它是SQL处理的基础$2表示schema.table,但此处用户可以使用“%”,也可以通过NOT关键字排除。它以“')”结尾。下一个是第二个schema.table,这就是我想要捕获的schema.table。 我想我应该用正则表达式解析“')”

您能告诉我如何通过awk在下面的文本中打印“user.%”字符串吗? “user”的值不固定,“()”中的字符串数不固定

start user1.table% NOT (%OLD, %2016%)  user.% another strings
更新

它是SQL处理的基础$2表示schema.table,但此处用户可以使用“%”,也可以通过NOT关键字排除。它以“')”结尾。下一个是第二个schema.table,这就是我想要捕获的schema.table。 我想我应该用正则表达式解析“')”之后的字符串,但失败了

正则表达式:

[)]\s+(\S+)
我想上面的表达式可以用来捕捉那个字符串。
如何在awk脚本(不是一个行程序)中应用这一点。

如果查询的结构保持不变,您可以使用:

awk -F'[).]' '{print $3".%"}'
grep -oP '\)\s*\K[^%]*%'
我使用右括号或文字点作为分隔符。这样,兴趣值在字段3中

虽然很简单,但它在用户面前留下了一些空白。我们可以增强字段分隔符regex以解决此问题:

awk -F')[[:space:]]*|[.]' '{print $3".%"}'

顺便说一句,您也可以使用此sed命令:

sed 's/.*)[[:space:]]*\([^.]*\).*/\1.%/'
或者,如果您有GNU grep,请使用以下命令:

awk -F'[).]' '{print $3".%"}'
grep -oP '\)\s*\K[^%]*%'

如果查询的结构保持不变,则可以使用:

awk -F'[).]' '{print $3".%"}'
grep -oP '\)\s*\K[^%]*%'
我使用右括号或文字点作为分隔符。这样,兴趣值在字段3中

虽然很简单,但它在用户面前留下了一些空白。我们可以增强字段分隔符regex以解决此问题:

awk -F')[[:space:]]*|[.]' '{print $3".%"}'

顺便说一句,您也可以使用此sed命令:

sed 's/.*)[[:space:]]*\([^.]*\).*/\1.%/'
或者,如果您有GNU grep,请使用以下命令:

awk -F'[).]' '{print $3".%"}'
grep -oP '\)\s*\K[^%]*%'
试试这个(GNU awk):

您需要首先匹配(GNU awk函数)。

试试这个(GNU awk):


您需要首先匹配(GNU awk函数)。

鉴于您发布的示例输入,您只需要:

awk '{print $6}'
e、 g:


如果这对您不起作用,那么您发布的示例输入不能充分代表您的真实输入,因此请编辑您的问题,以包括几行真正具有代表性的示例输入以及给定该输入的预期输出。

鉴于您发布的示例输入,您只需:

awk '{print $6}'
e、 g:


如果这对你不起作用,那么你发布的样本输入就不能代表你的真实输入,所以编辑你的问题,包括几行真正有代表性的样本输入和给定输入的预期输出。

?这是某种Windows批处理文件吗?什么是批处理变量?一些SQL的东西?您需要提供更多的上下文。实际上,它是SQL处理的基础$2表示schema.table,但此处用户可以使用“%”,也可以通过NOT关键字排除。它以“')”结尾。下一个是第二个schema.table,这就是我想要捕获的schema.table。谢谢,嗯?这是某种Windows批处理文件吗?什么是批处理变量?一些SQL的东西?您需要提供更多的上下文。实际上,它是SQL处理的基础$2表示schema.table,但此处用户可以使用“%”,也可以通过NOT关键字排除。它以“')”结尾。下一个是第二个schema.table,这就是我想要捕获的schema.table。谢谢。它在一个班轮里运行得很好。顺便说一句,当我把它放在awk脚本中时,它只是不打印。怎么了?开始{FS=“)[[:space:][]*|[.]“;}{print$3”。%“}为什么要设置
FS=''
?在awk脚本中,我使用了FS=“)[:space:][]*|[.]”来表示FS应该是
”)[[:space:][.]*|[.]”;哦,我明白了。不管怎么说,我无法复制。看起来您没有在问题中正确指定输入数据。它在一行程序中运行良好。顺便说一句,当我把它放在awk脚本中时,它只是不打印。怎么了?开始{FS=“)[[:space:][]*|[.]“;}{print$3”。%“}为什么要设置
FS=''
?在awk脚本中,我使用了FS=“)[:space:][]*|[.]”来表示FS应该是
”)[[:space:][.]*|[.]”;哦,我明白了。不管怎么说,我无法复制。看起来您在问题中没有正确指定输入数据。@POW wrt
您不能使用\s,因为awk不支持它。
-是的。或者至少您正在使用的awk版本确实如此。
match()
的第三个参数是特定于gawk的,因此既然您已经在使用gawk,您也可以愉快地使用其他gawk扩展,如
\s
。您应该在回答中说明它是特定于gawk的顺便说一句。@POW wrt
您不能使用\s,因为awk不支持它。
-是的。或者至少您正在使用的awk版本确实如此。
match()
的第三个参数是特定于gawk的,因此既然您已经在使用gawk,您也可以愉快地使用其他gawk扩展,如
\s
。你应该在你的回答中说明这是针对gawk的。谢谢你的建议。我更新了问题,说“()”中的字符串数不是固定的。您应该更新示例输入和预期输出,以显示具有不同布局的一些行。在文本中说明它只是部分有用-我们需要一些我们可以测试潜在解决方案的东西。谢谢你的建议。我更新了问题,说“()”中的字符串数不是固定的。您应该更新示例输入和预期输出,以显示具有不同布局的一些行。在文本中陈述它只是部分有用——我们需要一些我们可以测试潜在解决方案的东西。