(6)修改字段或NF引起的$0重新计算
修改字段或NF值的联动效应
注意下面的分割和计算两词:分割表示使用FS(field Separator),计算表示使用预定义变量OFS(Output Field Separator)。
- 修改
$0
,将使用FS
重新分割字段,所以会影响$1、$2...
- 修改
$1、$2
,将根据$1
到$NF
等各字段来重新计算$0
- 即使是
$1 = $1
这样的原值不变的修改,也一样会重新计算$0
- 即使是
- 为不存在的字段赋值,将新增字段并按需使用空字符串填充中间的字段,并使用
OFS
重新计算$0
awk 'BEGIN{OFS="-"}{$(NF+2)=5;print $0}' a.txt
- 增加NF值,将使用空字符串新增字段,并使用
OFS
重新计算$0
awk 'BEGIN{OFS="-"}{NF+=3;print $0}' a.txt
- 减小NF值,将丢弃一定数量的尾部字段,并使用
OFS
重新计算$0
awk 'BEGIN{OFS="-"}{NF-=3;print $0}' a.txt
关于$0
当读取一条record之后,将原原本本地被保存到$0
当中。
awk '{print $0}' a.txt
但是只要出现了上面所说的任何一种导致$0重新计算的操作,都会立即使用OFS去重建$0
换句话说,没有导致$0
重建,$0
就一直是原原本本的数据,所以指定OFS也无效。
awk 'BEGIN{OFS="-"}{print $0}' a.txt # OFS此处无效
当$0
重建后,将自动使用OFS重建,所以即使没有指定OFS,它也会采用默认值(空格)进行重建。
[root@docker-01 ~]# awk '{$4+=10;OFS="-";print $0}' a.txt # OFS对第一行无效 [root@docker-01 ~]# awk '{$4+=10;OFS="-";$1=$1;print $0}' a.txt # 对所有行有效
关注$0
重建是一个非常有用的技巧。
例如,下面通过重建$0
的技巧来实现去除行首行尾空格并压缩中间空格:
[root@docker-01 ~]# echo " a b c d " | awk '{$1=$1;print}' a b c d [root@docker-01 ~]# echo " a b c d " | awk '{$1=$1;print}' OFS="-" a-b-c-d
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?