数据类型
gawk有两种基本的数据类型:数值和字符串。在gawk 4.2.0版本中,还支持第三种基本的数据类型:正则表达式类型。
数据是什么类型在使用它的上下文中决定:在字符串操作环境下将转换为字符串,在数值操作环境下将转换为数值。这和自然语言中的一个词语、一个单词在不同句子内的不同语义是一样的。
隐式转换:
- 算术加0操作可转换为数值类型
"123" + 0
返回数值123" 123abc" + 0
转换为数值时为123- 无效字符串将转换成0,例如
"abc"+3
返回3
- 连接空字符串可转换为字符串类型
123""
转换为字符串"123"
[root@docker-01 ~]# awk 'BEGIN{a="123";print typeof(a+0)}' number [root@docker-01 ~]# awk 'BEGIN{a=123;print typeof(a"")}' string [root@docker-01 ~]# awk 'BEGIN{a=2;b=3;print(a b)+4}' 27
显式转换:
- 数值->字符串:
- CONVFMT或sprintf():功能等价。都是指定数值转换为字符串时的格式
[root@docker-01 ~]# awk 'BEGIN{a=123.4567;CONVFMT="%.2f";print a""}' 123.46 [root@docker-01 ~]# awk 'BEGIN{a=123.4567;print sprintf("%.2f", a)}' 123.46 [root@docker-01 ~]# awk 'BEGIN{a=123.4567;printf("%.2f",a)}' 123.46
- 字符串->数值:strtonum()
[root@docker-01 ~]# gawk 'BEGIN{a="123.4567";print strtonum(a)}' 123.457
awk字面量
awk中有3种字面量:字符串字面量、数值字面量和正则表达式字面量。
数值字面量
整数、浮点数、科学计数 105 105.1 1.05e+2 1050e-1 awk内部总是使用浮点数方式保存所有数值,但用户使用可以转换成整数的数值时总会去掉小数点。 数值12.0面向用户的值是12,12面向awk内部的值是12.00000.....0
# 结果是123而非123.0 [root@docker-01 ~]# awk 'BEGIN{a=123.0;print a}' 123
算术运算
++ -- 自增、自减,支持i++和++i或--i或i-- ^ 幂运算(**也用于幂运算) + - 一元运算符(正负数符号) * / % 乘除取模运算 + - 加减法运算 # 注: # 1.++和--既可以当作独立语句,也可以作为表达式,如: # awk 'BEGIN{a=3;a++;a=++a;print a}' # 2.**或^幂运算是从右向左计算的:print 2**1**3得到2而不是8
赋值操作(优先级最低)
= += -= *= /= %= ^= **=
疑惑:b = 6;print b += b++
输出结果?可能是12或13。不同的awk的实现在评估顺序上不同,所以不要用这种可能产生歧义的语句。
字符串字面量
awk中的字符串都以双引号包围,不能以单引号包围。
"abc" "" "