轨道
/
AWK
AWK
/
练习
/
简单报告
简单报告

简单报告

学习练习

简介

数字与字符串

AWK 是一门非常小的语言,只有几种基本数据类型。 本课将介绍数字和字符串。

数字

在 AWK 中,数字以双精度浮点数的形式实现。 整数、浮点数和双精度数之间没有区分。

AWK 支持八进制数字常量(以0开头)和十六进制数字常量(以0x或0X开头)。

数值运算

你可以使用标准算术运算符+、-、*、/、%。 幂运算符是^。 AWK 还有一些内置的数值函数,包括三角函数、随机数生成,以及把数字截断为 x 与零之间最接近整数的int(x)。

字符串

AWK 字符串是字符组成的序列。 用双引号来表示字符串常量。

字符串运算

字符串运算只有一种:拼接。 拼接没有专门的运算符, 只要把两个字符串并排放在一起,它们就会拼接起来:

BEGIN {
    hw = "Hello" "World"
    print hw
}
# => HelloWorld
Note

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。

任务 1:生成报告

你的任务是求出这两条读数的平均值,并按以下格式输出每一行的结果

#<id>, <label> = <average>

由于 42 和 54 的平均值是 48,示例行的输出应该是:

#101, house = 48
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
AWK Exercism

准备好开始 简单报告 了吗?

注册 Exercism,借助 3 个概念92 个练习 和真人导师指导,学习并掌握 AWK,全部免费。