当前位置: 首页 > news >正文

第5.5节:awk算术运算

1 第5.5节:awk算术运算

::: alert-danger
awk的算术运算与C语法的算术运算调试类似,如果用户学习过C/C++语言,此章节可以快速一扫而过。
:::

awk 语言在计算表达式时会使用常见的算术运算符。所有这些算术运算符都遵循常规的优先级规则,其工作方式与你预期的一致。

下面的示例使用了一个名为 grades.txt 的文件,该文件包含学生姓名列表以及每个学生的三门考试成绩(这是一个小班):

Pat  100 97 58
Sandy  84 72 93
Chris  72 92 89

以下程序读取 grades.txt 文件并输出成绩的平均值:

$ awk '{ sum = $2 + $3 + $4 ; avg = sum / 3
>        print $1, avg }' grades.txt
-| Pat 85
-| Sandy 83
-| Chris 84.3333

以下列表按优先级从高到低的顺序列出了 awk 中的算术运算符:

表达式含义解释
x ^ y
x ** y
幂运算;xy 次幂。例如,2 ^ 3 的值是 8;
字符序列 **^ 等价。(c.e. 可能是特定语境下的缩写,若无特殊说明可忽略 )
- x取反(否定)。
+ x一元正号;将表达式转换为数字(一般用于显式强调数值类型转换,
实际运算里单独用效果常类似直接取值,但有语法语义上的转换作用 )。
x * y乘法运算。
x / y除法运算;由于 awk 中所有数字都是浮点数,结果不会取整为整数。
比如 3 / 4 的结果是 0.75 。(这是个常见误区,尤其是对于 C 语言程序员而言,
容易忘记 awk 里所有数字都是浮点型,对看似整数的常量做除法会得到实数,而非整数 )
x % y取余运算;文本中紧跟在本列表之后会有更详细的讨论。
x + y加法运算。
x - y减法运算。

一元正号和负号优先级相同,乘法类运算符(乘法、除法、取余)优先级相同,加法和减法优先级相同。

计算 x % y(取余运算)时,商向零取整为整数后再乘以 y 。用该结果去减 x ,此操作有时也称作 “截断取余(trunc - mod)” 。以下等式始终成立:

b * int(a / b) + (a % b) == a  

这种取余定义可能带来一个不太理想的结果:若 x 为负数,x % y 结果也为负。例如:

-17 % 8 = -1  

该定义符合 POSIX 标准,标准规定 % 运算符的结果,等价于使用标准 C 语言 fmod() 函数的结果,而该函数的工作方式就如前文所述。

在其他 awk 实现中,取余结果的符号可能因机器而异。

注意:POSIX 标准仅规定用 ^ 进行幂运算。为了最大程度保证可移植性,请勿使用 ** 运算符。


作者声明:本文用于记录和分享作者的学习心得,可能有部分文字或示例来自AI平台,如:豆包、DeepSeek(硅基流动)(注册链接)等,由于本人水平有限,难免存在表达错误,欢迎留言交流和指教!
Copyright © 2022~2025 All rights reserved.

http://www.lryc.cn/news/626124.html

相关文章:

  • 基于深度学习的森林火灾图像识别实战
  • 【撸靶笔记】第七关:GET - Dump into outfile - String
  • 浙江电信IPTV天邑TY1613_高安版_晶晨S905L3SB_安卓9_原厂固件自改_线刷包
  • Linux中Docker k8s介绍以及应用
  • windows电脑对于dell(戴尔)台式的安装,与创建索引盘,系统迁移到新硬盘
  • 微信小程序连接到阿里云物联网平台
  • 高等数学 8.6 空间曲线及其方程
  • 添加右键菜单项以管理员权限打开 CMD
  • DNS有关知识(根域名服务器、顶级域名服务器、权威域名服务器)
  • 【C语言16天强化训练】从基础入门到进阶:Day 3
  • Vue 2 项目中快速集成 Jest 单元测试(超详细教程)
  • 【矢量数据】1:250w中国地质图地断层数据/岩性shp数据
  • EPM240T100I5N Altera FPGA MAX II CPLD
  • 无人机/航测/三维建模领域常见的“航线规划或建模方式
  • Everything 搜索工具下载安装使用教程(附安装包)Everything
  • 在 Python 中操作 Excel 文件的高效方案 —— Aspose.Cells for Python
  • mycat分库分表实验
  • [激光原理与应用-302]:光学设计 - 光学设计的流程、过程、方法、工具
  • mlir replace
  • C#传参调用外部exe
  • 线段树结合矩阵乘法优化动态规划
  • 福彩双色球第2025095期综合分析
  • C++排序算法学习笔记
  • AC 内容审计技术
  • 智慧水务流量在线监测系统解决方案
  • 项目过程管理的重点是什么
  • linux控制其他程序使用cpu低于50%——笔记
  • LangChain RAG 简述
  • [激光原理与应用-309]:光学设计 - 什么是光学系统装配图,其用途、主要内容、格式与示例?
  • 47 C++ STL模板库16-容器8-关联容器-集合(set)多重集合(multiset)