1 第5.3节:awk数据类型
awk并没有非常严格的数据类型,但在编写代码的过程中,大致可以分为以下数据类型:
1.1 数字型
#普通表示法
a = 123
b = 123.333
#科学表示法
c = 1.33e13
d = 1.05e-5
代码示例:
$ echo |awk '{
> print 123
> print 123.333
> print 1.33e13
> print 1.05e-5
> }'
123
123.333
13300000000000
1.05e-05
🕮说明:在可处理的范围内,科学计数法的数字输出时可能会转换成普通表示法。
1.2 不同进制的表示
在编写代码过程中,可能会用到8进制与16进制的描述,绝大部分编程语言都提供了这些进制的表示方法。
以下是这段内容的翻译:
数值表示 | 说明 |
---|---|
11 | 十进制值 11 |
011 | 八进制 11,十进制值为 9 |
0x11 | 十六进制 11,十进制值为 17 |
$ gawk 'BEGIN { printf "%d, %d, %d\n", 011, 11, 0x11 }'
输出:
9, 11, 17
1.3 字符串型
和大多数编程语言一样, 字符串使用双引号来表示:
"string"
代码示例:
$ echo |awk '{
> print "hello"
> }'
hello
如果文本行比较长,可以使用“\”进行换行书写, 换行后新行前的空白符需要注意,会被当成字符串的内容:
#!/bin/gawk -f
BEGIN {str = "this is \a long text \with many lines."print str
}
输出:
this is a long text with many lines.
1.4 正则表达式类型
正则表达式也是一种数据类型,前面的章节已经介绍过正则表达式的使用,描述正则表达式常量是使用两条斜线前后包围该常量,如:/regex/
。
示例1:
if ($0 ~ /^\s*$/)
{...
}
上面的例子中使用了正则表达式常量/^\s*$/
。
示例2:
re = /^\s*$/ #这里的正则表达式赋值是错误的!
if($0 ~ re)
{...
}
注:re = /^\s*$/
实际是re = $0 ~ /^\s*$/
的结果。
如:下面的代码,re
的结果是1
$ echo | awk '{re = /^\s*$/;print re}'
1
如果非要将正则表达式赋值给一个变量该怎么办呢?可以在赋值时在正则表达式前加一个@
符号:
$ echo | awk 'BEGIN { re = @/^\s*$/} {if($0 ~ re) {print "matched!"}}'
matched!
作者声明:本文用于记录和分享作者的学习心得,可能有部分文字或示例来自AI平台,如:豆包、DeepSeek(硅基流动)(注册链接)等,由于本人水平有限,难免存在表达错误,欢迎留言交流和指教!
Copyright © 2022~2025 All rights reserved.