对于awk,True是非空字符串或非零数字(数字是十进制整数或浮点数,并且在某些awk实现中也支持十六进制或八进制)。用双引号括起来的东西是字符串,不带引号的文字数字是数字,但是对于其他任何东西,都有复杂的规则来确定将某事物视为字符串还是数字。GNU awk手册中有一整章。
真正:
awk '1' (非零数字)
awk '1e8' (非零数字)
awk '-0.01' (非零数字)
awk '"foo"' (非空字符串)
awk '"0"' (非空字符串)
awk '0 ""' (串联产生的字符串在这里非空)
echo 0 | awk '$1 ""' (与$ n字段相同)
awk 'substr("000", 1, 1)'(结果substr()始终是一个字符串)
echo '0foo' | awk '$0' ($ 0是非数字字符串,因此被视为字符串(非空))
假:
awk '0' (0号)
awk '""' (空字符串)
echo 0000e123 | awk '$1' (如果$ 1是一个数字字符串,并且在此处为0,则它被认为是数字)
echo ' 0 ' | awk '$0' (忽略前导和尾随空格以确定字符串是否为数字)。
awk '" 2foo" - 2' (算术表达式中涉及的字符串将转换为数字,且忽略该数字的任何内容)
awk 'unset_or_empty_variable' (空字符串)
awk '"non-numerical-string" + 0'
YMMV:
awk '1e-500' (有些人会抱怨,有些人会将其视为0)
awk '"0x1" + 0'(不是所有的awk实现支持的十六进制数,对那些确实"0x1"被转化为1,在别人0。有些版本的POSIX规范的不经意间需要实现来支持十六进制数那里,它被后来收回。不过gawk确实,当认识到十六进制数POSIXLY_CORRECT是环境)
awk '010 - 8' (与八进制数相同(与从字符串转换成的字符相反,此处的010与文字不同)
awk '0x1 - 1'(在awk不支持十六进制数字的实现中,0x1是的串联0和x1产生的变量将"0"转换为数字(0)(如果减去则1得出的-1是非零数字))。
这意味着如果要检查字符串是否为非空,则不应执行以下操作:
awk'$ 1 {打印$ 1,“不为空”}}'
但
awk '$1 != "" {print $1, "is not empty"}'
否则,它不会说0或-0000E+00001234有非空。
any_integer我猜你喜欢平均字面数量7, 89等。如果是这样,原因是比任何其他一些0手段true的条件