对于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
的条件