(14)awk布尔值、比较和逻辑运算

 

awk布尔值

在awk中,没有像其它语言一样专门提供true、false这样的关键字。

但它的布尔值逻辑非常简单:

  • 数值0表示布尔假
  • 空字符串表示布尔假
  • 其余所有均为布尔真
    • 字符串"0"也是真,因为它是字符串
  • awk中,正则匹配也有返回值,匹配成功则返回1,匹配失败则返回0
  • awk中,所有的布尔运算也有返回值,布尔真返回值1,布尔假返回值为0

 

[root@docker-01 ~]# awk '
> BEGIN{
>     if(1){print "haha"}
>     if("0"){print "hehe"}
>     if(a=3){print "hoho"}  # if(3){print "hoho"}
>     if(a==3){print "aoao"}
>     if(/root/){print "heihei"}  # $0 ~ /root/
> }'
haha
hehe
hoho
aoao
[root@docker-01 ~]# awk 'BEGIN{if(1){print "haha"}}'
haha
[root@docker-01 ~]# awk 'BEGIN{if(/root/){print "heihei"}}'

 

awk中比较操作

 

strnum类型

awk最基本的数据类型只有string和number(gawk 4.2.0版本之后支持正则表达式类型)。但是,对于用户输入数据(例如从文件中读取的各个字段值),它们理应属于string类型,但有时候它们看上去可能像是数值(例如$2=37),而有时候有需要这些值是数值类型。

awk的数据来源:

  1. awk内部产生的,包括变量的赋值、表达式或函数的返回值。
  2. 从其它来源获取到的数据,都是外部数据,也是用户输入数据,这些数据理应全部都是string类型的数据。

所以POSIX定义了一个名为"numeric string"的"墙头草"类型,gawk中则称为strnum类型。当获取到的用户数据看上去是数字时,那么它就是strnum类型。strnum类型在被使用时会被当作数值类型。

注意,strnum类型只针对于awk中除数值常量、字符串常量、表达式计算结果外的数据。例如从文件中读取的字段$1$2、ARGV数组中的元素等等。

[root@docker-01 ~]# echo "30" | awk '{print typeof($0) " " typeof($1)}'
strnum strnum
[root@docker-01 ~]# echo "+30" | awk '{print typeof($1)}'
strnum
[root@docker-01 ~]# echo "30a" | awk '{print typeof($1)}'
string
[root@docker-01 ~]# echo "30 a" | awk '{print typeof($0) " " typeof($1)}'
string strnum
[root@docker-01 ~]# echo " +30 " | awk '{print typeof($0) " " typeof($1)}'
strnum strnum

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

上一篇:LeetCode --- 字符串系列 --- 转换成小写字母


下一篇:TabWight