gpt4 book ai didi

awk:在 END block 中捕获 `exit'

转载 作者:行者123 更新时间:2023-12-04 18:12:41 25 4
gpt4 key购买 nike

我正在使用 awk用于格式化输出文件中的输入文件。我有几种模式来填充变量(例如示例中的“某种模式”)。这些变量以所需的格式打印在 END 中。堵塞。输出必须在那里完成,因为无法保证输入文件中的出现顺序,但输出文件中的顺序必须始终相同。

BEGIN {
FS = "=|,"
}


/some pattern/ {
if ($1 == 8) {
var = $1
} else {
# Incorrect field value
exit 1
}
}

END {
# Output the variables
print var
}

所以我的问题是 exit模式中的声明。如果出现错误并且调用了此命令,则根本不应该有任何输出,或者至多是一条错误消息。但正如 gawk 手册( here )所说,如果 exit命令在模式块中调用 END块将至少被执行。有什么办法可以 catch exit喜欢:
if (!exit_invoked) {
print var
}

或其他避免在 END 中打印输出的方法堵塞?

斯特凡

编辑:使用了 shellter 的解决方案。

最佳答案

你必须明确地处理它,通过设置 exit_invoked之前 exit线,即

BEGIN {
FS = "=|,"
}


/some pattern/ {
if ($1 == 8) {
var = $1
} else {
# Incorrect field value
exit_invoked=1
exit 1
}
}

END {
if (! exit_invoked ) {
# Output the variables
print var
}
}

我希望这有帮助。

关于awk:在 END block 中捕获 `exit',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10128743/

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