我正在使用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
块将至少执行。有没有办法赶上exit
喜欢:
if (!exit_invoked) {
print var
}
或其他一些方法可以避免在END
块中打印输出?
的Stefan
编辑:使用shellter的解决方案。
答案 0 :(得分:6)
你必须明确处理它,方法是在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
}
}
我希望这会有所帮助。
答案 1 :(得分:0)
import pandas as pd
list(pd.DataFrame(d).dropna().index)
#['key_x', 'key_y']
答案 2 :(得分:0)
喜欢使用简短的语法,并尝试避免徒劳的{}
或稍后将其添加到预先存在的程序中,而不是:
...
else {
exit_invoked=1
exit 1
}
...
END {
if (! exit_invoked ) {
print var
}
}
我使用:
else
exit (e=1) # the point
...
END {
if(!e)
print v
}