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

第5.6节:awk字符串运算

1 第5.6节:awk字符串运算

1.1 堆叠式拼接字符串

  字符串操作仅有**连接(拼接)**这一种。它没有专门的运算符来表示,而是通过将表达式彼此相邻书写(不加运算符)来实现拼接。例如:

$ awk '{ print "Field number one: " $1 }' mail-list  
-| Field number one: Amelia  
-| Field number one: Anthony  
...  

  要是字符串常量里 : 后面的空格没了,整行就会连在一起。比如:

$ awk '{ print "Field number one:" $1 }' mail-list  
-| Field number one:Amelia  
-| Field number one:Anthony  
🕮说明
   字符串参数和参数之间至少有1个空格,否则变量名就解析失败了!另外一种可行的实践是将待拼接的几个字符串变量使用()进行包围。

  由于字符串拼接没有显式的运算符,通常需要使用圆括号将待拼接的项括起来,以确保拼接在合适的时机进行。例如,你可能期望下面的代码片段拼接 filename

file = "file"
name = "name"
print "something meaningful" > file name

  在某些版本的 Unix awk 中,这会产生语法错误。必须按如下方式编写:

print "something meaningful" > (file name)

  除了最常见的场景(比如在 = 的右侧),在拼接操作周围都应该使用圆括号。要留意用于字符串拼接的表达式类型,具体来说,awk 语言中未定义用于拼接的表达式的求值顺序。考虑以下示例:

BEGIN {a = "don't"print (a " " (a = "panic"))
}

  无法确定对 a 的第二次赋值是在为生成拼接值而获取 a 的值之前还是之后进行。结果可能是 don't panic,也可能是 panic panic

当拼接与其他运算符混合使用时,其优先级往往有悖直觉。考虑以下示例:

$ awk 'BEGIN { print -12 " " -24 }'
-| -12-24

  这“显然”是要拼接 -12、一个空格和 -24 。但空格哪儿去了呢?答案在于运算符优先级和 awk 自动转换规则的共同作用。要得到期望的结果,应按如下方式编写程序:

$ awk 'BEGIN { print -12 " " (-24) }'
-| -12 -24

  这样做会迫使 awk 将 -24 中的 - 视为一元运算符。否则,解析过程如下:

-12 (" " - 24)-12 (0 - 24)-12 (-24)
⇒ -12-24

  如前所述,当拼接与其他运算符混合使用时,要加上圆括号。否则,你永远无法完全确定会得到什么结果 。

1.2 使用sprintf函数拼接字符串

  使用sprintf函数拼接字符串会更清晰,也是本文作者更乐于使用的一种方式。

$ awk '{print sprintf("Line %s: %s", FNR, $0)}' sample1.txt
Line 1: sample
Line 2: 1
Line 3: 12
Line 4: 123
Line 5: 456
Line 6: 789abc
Line 7: 012345678
Line 8: end

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

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

相关文章:

  • python新工具-uv包管理工具
  • 编排之神--Kubernetes中的网络通信-Flannel插件及Calico插件演练
  • Android SystemServer 中 Service 的创建和启动方式
  • Milvus 安装和启动指南
  • 决策树学习(2)
  • almalinux9.6系统:k8s可选组件安装(1)
  • 数字ic后端设计从入门到精通14(含fusion compiler, tcl教学)半定制后端设计
  • 第三阶段数据库-2:数据库连接
  • [超表面论文快讯-200]PNAS-超表面辅助的多模态量子成像-南京大学祝世宁院士/新国立仇成伟院士团队
  • 警惕可变参数构造函数无限递归
  • Day13_【DataFrame数据组合join合并】【案例】
  • 让模型不再忽视少数类:MixUp、CutMix、Focal Loss三种技术解决数据不平衡问题
  • RabbitMQ:SpringAMQP Direct Exchange(直连型交换机)
  • RabbitMQ:SpringAMQP 入门案例
  • Flink on Native K8S安装部署
  • 3.Kotlin 集合 Set 所有方法
  • es9.0.1语义检索简单示例
  • 颠覆性进化:OpenAI正式发布GPT-5,AI大模型进入“超级智能”时代
  • InnoDB为什么使用B+树实现索引?
  • 神经网络拆解:用Excel模拟手写数字识别
  • Flume学习笔记
  • OR+DBLINK的关联SQL优化思路
  • Transformer中的编码器和解码器是什么?
  • LLMs之RL之GSPO:《Group Sequence Policy Optimization》翻译与解读
  • 高校数字化转型实战:破解数据孤岛、构建智能指标体系与AI落地路径
  • 数据清理后续
  • 低功耗模式
  • Java配置文件
  • Consul- acl机制!
  • 01-Docker-简介、安装与使用