gpt4 book ai didi

用于封闭 {} 的 Awk 语法

转载 作者:行者123 更新时间:2023-12-01 01:20:33 25 4
gpt4 key购买 nike

据我了解,在 awk 中可以使用以下任一方式开始条件评估:

if ($0 ~ /no/) {cmd}
($0 ~ /no/) {cmd}
$0 ~ /no/ {cmd}
/no/ {cmd}

在通用命令行中

BEGIN {  }  (body) END {  }

我发现将 (body) 括在方括号中最合乎逻辑,如 {(body}(称为“方括号”)。

在 GNU awk、Ubuntu 12.04 下,只有括号中的 4 个选项中的第一个会执行 - 至少在我的机器上是这样(其他的会产生语法错误)。如果我运行未加括号的行,只有第一个失败,其余 3 个工作正常。有人可以仔细解释为什么会这样吗?

最佳答案

awk 语句遵循以下规则:

PATTERN{action}

所以 BEGINEND 只是特殊的 PATTERN。基本上,如果 PATTERN 为真,则执行 {..}

中的操作

PATTERN 可以是正则表达式,表达式和范围也可以是

空模式看起来像:

awk '{print "foo"}' input

您可以阅读 http://www.gnu.org/software/gawk/manual/gawk.html 7.1 节了解详情。

回到你的问题,如果你在 Action 部分执行了那 4 行,也就是在 {...} 之间,(实际上是空模式),只有第一行,带有 if 是有效的条件语句。但是,如果您使用匹配检查作为模式,(在 {..} 之外):

if ($0 ~ /no/) {cmd} # this would ***NOT*** work, because it is statment, not valid awk expression. (I don't know how did you make it work.)

($0 ~ /no/) {cmd} # this will work, it is a boolean expression

$0 ~ /no/ {cmd} # same as above

/no/ {cmd} # this is regexp pattern, so it works too.

关于用于封闭 {} 的 Awk 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18945926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com