在awk中,如何在common-tolower()操作之后搜索复杂的模式组合

在awk中,如何在common-tolower()操作之后搜索复杂的模式组合,awk,Awk,我正在尝试使用关键字从一个长列表中选择一些论文标题。 以下是为解决此问题而简化的示例线 tolower($0) ~ /model selection/ || tolower($0) ~ /structure learning/{print} 有了这一行,我想打印任何包含“模型选择”或“结构学习”的行。但是对于我在命令行中添加的每个模式,我必须将这个放到更低的($0)~表达式中。否则,awk将不会打印包含型号选择或结构学习的行。是否有一种方法可以应用模式aftertolower($0)~函数 在

我正在尝试使用关键字从一个长列表中选择一些论文标题。
以下是为解决此问题而简化的示例线

tolower($0) ~ /model selection/ || tolower($0) ~ /structure learning/{print}
有了这一行,我想打印任何包含“模型选择”或“结构学习”的行。但是对于我在命令行中添加的每个模式,我必须将这个
放到更低的($0)~
表达式中。否则,awk将不会打印包含
型号选择
结构学习
的行。是否有一种方法可以应用模式
after
tolower($0)~函数

在发布了这个问题之后,我意识到我真正想要做的是对tolower($0)的输出使用逻辑模式操作,类似于(如果我想打印带有
pattern1和(pattern2或pattern3)

无需重复tolower()。。我还想用tolower()搜索模式,比如$0中的/RL/。
我当然可以

/RL/ || (tolower($0) ~ /pattern1/ && tolower($0) ~ /pattern2|pattern3/) {print}

但是我只想使用tolower()一次。

与GNU awk for IGNORECASE(实际上不需要,因为您可以使用tolower($0),但包含了仅供参考)和switch语句:

{
    IGNORECASE=1
    switch($0) {
    case /model selection/:
    case /structure learning/: print
    }
}
从您的评论和更新的问题以及您仍然在问的事实来看,这可能是您正在寻找的:

{ lc = tolower($0) }
lc ~ /(regexp_a)|(regexp_b)/ || /RL/
或:


顺便说一句,它们是regexps,而不是模式。

带有GNU awk for IGNORECASE(实际上不需要,因为您可以使用tolower($0),但包含在其中以供参考)和switch语句:

{
    IGNORECASE=1
    switch($0) {
    case /model selection/:
    case /structure learning/: print
    }
}
从您的评论和更新的问题以及您仍然在问的事实来看,这可能是您正在寻找的:

{ lc = tolower($0) }
lc ~ /(regexp_a)|(regexp_b)/ || /RL/
或:


顺便说一句,它们是regexps,不是模式。

IGNORECASE设置是gnu awk功能

awk 'BEGIN{IGNORECASE=1} {$0 ~ /pattern1&(pattern2|pattern3)/ {print}  }'

IGNORECASE设置是gnu awk功能

awk 'BEGIN{IGNORECASE=1} {$0 ~ /pattern1&(pattern2|pattern3)/ {print}  }'

tolower($0)~/model selection | structure learning/
在这种情况下啊,这似乎是我一直在寻找的答案。!将其设置为anser,我将选择它。:)
tolower($0)~/model selection | structure learning/
在这种情况下啊,这似乎是我一直在寻找的答案。!将其设置为anser,我将选择它。:)嗨,谢谢。但是我必须搜索许多模式,我想把模式的变化放在每一行中。有时我还想搜索上面的字符,比如{/model selection/| | |/structure learning/}带忽略大小写和/RL/带区分大小写。你能用一行来做吗?我想我要找的答案是tolower($0)~/pattern | a | patern | b/| 0 ~/RL/{print}。正如上面提到的,你应该用更具代表性的样本输入、输出和代码来更新你的问题,因为有很多是做你最初要求做的事情,
就是做一些像tolower($0)~/model selection/|/structure learning/{print}的事情,而不是重复tolower
我更新了我的问题。我能在awk做我想做的吗?我看了手册页,似乎这是不可能的。是的,你更新了它,但它仍然没有说需要像你在文章中提到的那样区分大小写的比较。wrt
这似乎不可能
-嗯?你在同一条评论中说,
我想要的答案是…
那么为什么现在不可能呢?除非我遗漏了什么-是的,你可以用awk来做。嗨,谢谢。但是我必须搜索许多模式,我想把模式的变化放在每一行中。有时我还想搜索上面的字符,比如{/model selection/| | |/structure learning/}带忽略大小写和/RL/带区分大小写。你能用一行来做吗?我想我要找的答案是tolower($0)~/pattern | a | patern | b/| 0 ~/RL/{print}。正如上面提到的,你应该用更具代表性的样本输入、输出和代码来更新你的问题,因为有很多是做你最初要求做的事情,
就是做一些像tolower($0)~/model selection/|/structure learning/{print}的事情,而不是重复tolower
我更新了我的问题。我能在awk做我想做的吗?我看了手册页,似乎这是不可能的。是的,你更新了它,但它仍然没有说需要像你在文章中提到的那样区分大小写的比较。wrt
这似乎不可能
-嗯?你在同一条评论中说,
我想要的答案是…
那么为什么现在不可能呢?除非我遗漏了什么-是的,你可以用awk来做。