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

第6.4节:awk语言 for 语句

1 第6.4节:awk语言 for 语句

for 语句让统计循环迭代次数变得更加便捷。for 语句的一般形式如下:

for (initialization; condition; increment)body

initialization(初始化 )、condition(条件 )和 increment(增量 )部分可以是任意 awk 表达式,body 代表任意 awk 语句。

for 语句的执行流程是:先执行 initialization。之后,只要 condition 为真,就会重复执行 body,然后执行 increment。通常,initialization 会把一个变量设为 0 或 1,increment 会给该变量加 1,condition 则会将其与期望的迭代次数做比较。例如:

awk '
{for (i = 1; i <= 3; i++)print $i
}
' inventory-shipped

这段代码会打印每个输入记录的前三个字段,每个字段单独占一行输出。

熟悉 C 和 C++ 的程序员可能会期望能使用逗号运算符,在 for 循环的 initialization 部分设置多个变量,或者在循环的 increment 部分递增多个变量,像这样:

for (i = 0, j = length(a); i < j; i++, j--) ...  // C/C++ 写法,不是 awk 的!

但在 awk 中无法这样做,因为 awk 不支持逗号运算符。虽然有变通方法,但这些方法并不直观,还可能导致代码难以阅读和理解。因此,最好的做法是,在 for 循环之前,把额外的初始化操作写成单独的语句;在循环体末尾,把额外的增量操作也写成单独的语句。

多数情况下,increment 是一个增量表达式,就像前面的例子那样。但这不是强制要求,它可以是任意表达式。比如,以下语句会打印出 1 到 100 之间的所有 2 的幂:

for (i = 1; i <= 100; i *= 2)print i

如果不需要执行任何操作,for 关键字后面括号里的三个表达式中的任意一个都可以省略。比如,for (; x > 0;) 等价于 while (x > 0) 。如果省略 condition,它会被视为真,实际上就会产生一个无限循环(即永远不会终止的循环 )。

在大多数情况下,for 循环是 while 循环的一种简写形式,如下所示:

initialization
while (condition) {bodyincrement
}

唯一的例外是,当在循环内部使用 continue 语句时。把 for 语句改写成 while 语句的形式,可能会改变循环内部 continue 语句的效果。

awk 语言既有 for 语句又有 while 语句,是因为 for 循环在需要统计迭代次数的场景中,写起来更省事、思考起来更自然。把计数操作视为循环的一部分,而不是循环内部要做的事,可能会更容易。

for 循环还有另一种变体,用于遍历数组的所有下标:

for (i in array)do something with array[i]

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

http://www.dtcms.com/a/356788.html

相关文章:

  • Linux 软件编程(十四)网络编程:数据存储与 SQLite 数据库
  • (二)Python语法基础(下)
  • web端播放flv视频流demo(flv.js的使用)
  • 【C语言16天强化训练】从基础入门到进阶:Day 15
  • 量化研究--开放ptrade西蒙斯全天候ETF策略动量策略
  • 一文说清楚ABAP中的‘显示提交(Explicit Commit)’和‘隐式提交(Implicit Commit)’
  • CesiumJS 封装 - 初始化与配置
  • Ubuntu 搭建 Solana 区块链开发环境 + Anchor 智能合约完整教程
  • 2025年防窜货系统行业深度分析报告
  • 将数据赋值到Word并下载
  • Cesium 入门教程(十三):粒子系统实例
  • 无人机中的坐标系理解:机体坐标系,东北天(NED)坐标系,世界大地(WGS84)坐标系
  • Python的一次实际应用:利用Python操作Word文档的页码
  • AI 与脑机接口的交叉融合:当机器 “读懂” 大脑信号,医疗将迎来哪些变革?
  • CPP学习之map和set
  • 渗透测试学习笔记
  • 【论文阅读】SegCLIP:用于高分辨率遥感图像语义分割的多模态视觉语言和快速学习
  • Minio临时地址访问资源提示SignatureDoesNotMatch问题记录
  • gdb打印长字符产变量信息
  • TypeScript的Type
  • Linux(0)|梦开始的地方:xshell下载
  • MAC spotlight 搜不到应用程序和 tags 生效
  • 五、Callable 接口
  • Spring为什么需要三级缓存
  • 海康相机开发---设备布防(Setup Alarm)
  • 数据库Mysql
  • 微积分 | 积分代换
  • 如何将iPhone日历传输到电脑
  • 内置高压MOS的智能调光方案:AP5126 LED降压恒流驱动芯片
  • 深度拆解判别式推荐大模型RankGPT!生成式精排落地提速94.8%,冷启动效果飙升,还解决了传统推荐3大痛点