当前位置: 首页 > 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.lryc.cn/news/626139.html

相关文章:

  • 【驱动】RK3576:桌面操作系统基本概念
  • L2TP虚拟局域网
  • 快速傅里叶变换:数字信号处理的基石算法
  • Orange的运维学习日记--47.Ansible进阶之异步处理
  • 数据库-MYSQL配置下载
  • go链路追踪
  • 微算法科技(NASDAQ: MLGO)研究利用PBFT中的动态视图变换机制,实现区块链系统高效运转
  • 不同语言的并发模型对比:Go、Java与Python
  • Go高效复用对象:sync.Pool详解
  • 机器学习中的「损失函数」:模型优化的核心标尺
  • 决策树算法详解
  • 【完整源码+数据集+部署教程】鳄梨表面缺陷检测图像分割系统源码和数据集:改进yolo11-MLCA
  • QT聊天项目DAY19
  • 广东省省考备考(第八十一天8.19)——资料分析、数量(强化训练)
  • 第5.5节:awk算术运算
  • 基于深度学习的森林火灾图像识别实战
  • 【撸靶笔记】第七关: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