我正在使用awk
来格式化输出文件中的输入文件。我有几种模式来填充变量(如示例中的“某种模式”)。这些变量在END
块中以所需格式打印。输出必须在那里完成,因为输入文件中出现的顺序不能保证,但输出文件中的顺序必须始终相同。awk:在END块中捕获`exit'
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
块将至少执行。有没有办法赶上exit
这样的:
if (!exit_invoked) {
print var
}
或一些其他的方式,以避免打印输出在END
块?
斯特凡
编辑:用于从shellter的解决方案。
谢谢,不要想到这个简单的解决方案;)我会把它包装在一个函数中,不要忘记'exit_invoked'集合。 Stefan – Stefan 2012-04-12 17:51:44
@Stefan:好主意。提醒一下,你有这个变量,你可能想要在BEGIN块中设置,即'exit_invoked = 0'。有些人会抱怨说这是不必要的和多余的。我不会自己做,但它是一个很好的自我记录技术。 YRMV。祝你好运。 – shellter 2012-04-12 17:54:32
我会这样做,因为我不为自己编写'awk'程序。谢谢。 – Stefan 2012-04-12 17:59:16