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

第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.xdnf.cn/news/19168.html

相关文章:

  • Java ThreadLocal为什么要用弱引用
  • 2025最新:Salesforce认证考试—考试中心预约全流程
  • 香港电讯为知名投资公司搭建高效、安全IT管理服务体系
  • GraphRAG 知识图谱核心升级:集成 langextract 与 Gemini ----实现高精度实体与关系抽取
  • 营业执照识别技术应用OCR与深度学习,实现高效、精准提取企业核心信息,推动数字化管理发展。
  • Linux时间处理函数
  • 机器学习(三)sklearn机器学习
  • 第二阶段WinForm-11:自定义控件
  • Java全栈工程师的面试实战:从技术细节到业务场景
  • 在八月点燃AI智慧之火:CSDN创作之星挑战赛开启灵感盛宴
  • 04.《VLAN基础与配置实践指南》
  • Django Admin 管理工具
  • NSSCTF-[NISACTF 2022]string_WP
  • 身份证实名认证API集成—身份核验接口-网络平台安全合规
  • mitmproxy的使用初试
  • windows中Qwen3‑Coder 与 Claude Code 搭配使用
  • 《UE5_C++多人TPS完整教程》学习笔记45 ——《P46 待机与跳跃动画(Idle And Jumps)》
  • 【完整源码+数据集+部署教程】植物病害检测系统源码和数据集:改进yolo11-EMSCP
  • Lombok vs Java Record:谁才是未来?
  • week5-[二维数组]翻转
  • Node.js 的流(Stream)是什么?有哪些类型?
  • DBeaver 的 PostgreSQL 驱动包默认存储位置
  • 计算机网络知识--对称加密、非对称加密和数字证书详解
  • “上门做饭”平台的核心技术栈与运营壁垒是什么?
  • OpenCV之霍夫变换
  • Linux系统部署:Certbot 实现 Nginx 自动续期部署 Let‘s Encrypt 免费 SSL 证书
  • css三角形
  • 万字解析RAG(检索增强生成)系统的构建与优化,从基础架构逐步深入到高级技术
  • 深度学习入门Day10:深度强化学习原理与实战全解析
  • 虚拟机快照对内存与磁盘空间的影响