AWK 是一门非常小的语言,只有几种基本数据类型。 本课将介绍数字和字符串。
在 AWK 中,数字以双精度浮点数的形式实现。 整数、浮点数和双精度数之间没有区分。
AWK 支持八进制数字常量(以0开头)和十六进制数字常量(以0x或0X开头)。
你可以使用标准算术运算符+、-、*、/、%。
幂运算符是^。
AWK 还有一些内置的数值函数,包括三角函数、随机数生成,以及把数字截断为 x 与零之间最接近整数的int(x)。
AWK 字符串是字符组成的序列。 用双引号来表示字符串常量。
字符串运算只有一种:拼接。 拼接没有专门的运算符, 只要把两个字符串并排放在一起,它们就会拼接起来:
BEGIN {
hw = "Hello" "World"
print hw
}
# => HelloWorld
print是语句,不是函数。
print不需要括号。
AWK 有大量用于处理字符串的函数。 随着我们在这条学习路径上不断深入,我们会全面地认识它们。
数字和字符串之间没有显式的转换运算符。 AWK 会根据程序的上下文隐式地完成转换。 这让处理输入字段的值变得非常简单:AWK 通常就按你的想法行事。
print x + y会借助+的数值运算,把x和y变量的值转换为数字。print x y会借助拼接运算,把x和y变量的值转换为字符串。如果你想显式地转换,0 + x会给出 x 的数字表示,"" x会给出 x 的字符串表示。
AWK 把字符串转换为数字的方式可能会让人困惑。 一个简单的理解方式是:AWK 会从字符串开头开始读取“数字字符”,直到遇到“非数字”字符为止。 例如:
"2.5"转换为数字2.5;"1e3"转换为数字1000(科学计数法);"456abc"转换为数字456(因为a不是“数字”,转换到此停止)。"abc789"转换为数字0(字符串开头没有数字)。你正在帮一位朋友根据他在花园各个角落记录的读数生成一份报告。 遗憾的是,你的朋友把数据存成了一种奇怪的格式。 每条读数都是一组用逗号分隔的字段。 不过,他把两位数拆到了两列中。
| 字段编号 | 含义 |
|---|---|
| 1 | ID 编号 |
| 2 | 位置 |
| 3 | 第一条读数,十位 |
| 4 | 第一条读数,个位 |
| 5 | 第二条读数,十位 |
| 6 | 第二条读数,个位 |
对于像101,house,4,2,5,4这样的输入行:
42,54。你的任务是求出这两条读数的平均值,并按以下格式输出每一行的结果
#<id>, <label> = <average>
由于 42 和 54 的平均值是 48,示例行的输出应该是:
#101, house = 48