需要帮助AWK脚本

时间:2016-02-18 08:04:58

标签: awk

你能让我知道如何打印"用户。%" awk下面的文字字符串? '用户'的价值是不固定的和'()'中的字符串数量。没有修复。

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

更新

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

正则表达式:

[)]\s+(\S+)

上面的表达式可以用来捕捉那个字符串。 如何在awk脚本(不是一个班轮)中应用这个。

3 个答案:

答案 0 :(得分:2)

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

awk -F'[).]' '{print $3".%"}'

我使用右括号或文字点作为分隔符。这样做的兴趣值在第3栏。

虽然很简单,但在用户面前留下了一些空白。我们可以增强字段分隔符正则表达式来解决这个问题:

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

顺便说一下,你可以选择使用这个sed命令:

sed 's/.*)[[:space:]]*\([^.]*\).*/\1.%/'

或者如果你有GNU grep,请使用:

grep -oP '\)\s*\K[^%]*%'

答案 1 :(得分:2)

试试这个(GNU awk):

{{1}}

您需要先匹配(GNU awk功能)。

答案 2 :(得分:1)

根据您发布的样本输入,您只需要:

awk '{print $6}'

e.g:

$ echo 'start user1.table% NOT (%OLD, %2016%)  user.% another strings' |
    awk '{print $6}'
user.%

如果这对您不起作用,那么您发布的样本输入对您的实际输入的代表性不够,因此编辑您的问题以包含几行真正具有代表性的样本输入和给定输入的预期输出。