awk:在END块中捕获`exit’
发布时间:2020-12-14 01:03:48 所属栏目:Linux 来源:网络整理
导读:我正在使用awk格式化输出文件中的输入文件.我有几种模式来填充变量(例如示例中的“某些模式”).这些变量以END块中所需的格式打印.输出必须在那里完成,因为输入文件中的外观顺序不能保证,但输出文件中的顺序必须始终相同. BEGIN { FS = "=|,"}/some pattern/
我正在使用awk格式化输出文件中的输入文件.我有几种模式来填充变量(例如示例中的“某些模式”).这些变量以END块中所需的格式打印.输出必须在那里完成,因为输入文件中的外观顺序不能保证,但输出文件中的顺序必须始终相同.
BEGIN { FS = "=|," } /some pattern/ { if ($1 == 8) { var = $1 } else { # Incorrect field value exit 1 } } END { # Output the variables print var } 所以我的问题是模式中的退出语句.如果存在某些错误并且调用了此命令,则根本不应该输出或者最多没有错误消息.但正如gawk手册(here)所说,如果在模式块中调用exit命令,则至少会执行END块.有没有办法赶上出口像: if (!exit_invoked) { print var } 或其他一些方法来避免在END块中打印输出? 斯特凡 编辑:使用shellter的解决方案. 解决方法
你必须通过在退出行之前设置exit_invoked来明确地处理它,即
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 } } 我希望这有帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |