回到:


修改字段或NF值的联动效应

注意下面的分割和计算两词:分割表示使用FS(field Separator),计算表示使用预定义变量OFS(Output Field Separator)。

  1. 修改$0,将使用FS重新分割字段,所以会影响$1、$2...
  2. 修改$1、$2,将根据$1$NF等各字段来重新计算$0
    • 即使是$1 = $1这样的原值不变的修改,也一样会重新计算$0
  3. 为不存在的字段赋值,将新增字段并按需使用空字符串填充中间的字段,并使用OFS重新计算$0
    • awk 'BEGIN{OFS="-"}{$(NF+2)=5;print $0}' a.txt
  4. 增加NF值,将使用空字符串新增字段,并使用OFS重新计算$0
    • awk 'BEGIN{OFS="-"}{NF+=3;print $0}' a.txt
  5. 减小NF值,将丢弃一定数量的尾部字段,并使用OFS重新计算$0
    • awk 'BEGIN{OFS="-"}{NF-=3;print $0}' a.txt

关于$0

当读取一条record之后,将原原本本地被保存到$0当中。

awk '{print $0}' a.txt

换句话说,没有导致$0重建,$0就一直是原原本本的数据,所以指定OFS也无效。

awk 'BEGIN{OFS="-"}{print $0}' a.txt  # OFS此处无效

$0重建后,将自动使用OFS重建,所以即使没有指定OFS,它也会采用默认值(空格)进行重建。

awk '{$1=$1;print $0}'  a.txt  # 输出时将以空格分隔各字段
awk '{print $0;$1=$1;print $0}' OFS="-" a.txt

如果重建$0之后,再去修改OFS,将对当前行无效,但对之后的行有效。所以如果也要对当前行生效,需要再次重建。

# OFS对第一行无效
awk '{$4+=10;OFS="-";print $0}' a.txt

# 对所有行有效
awk '{$4+=10;OFS="-";$1=$1;print $0}' a.txt

关注$0重建是一个非常有用的技巧。

例如,下面通过重建$0的技巧来实现去除行首行尾空格并压缩中间空格:

$ echo "   a  b  c   d   " | awk '{$1=$1;print}'
a b c d
$ echo "     a   b  c   d   " | awk '{$1=$1;print}' OFS="-"
a-b-c-d

最新文章

  1. miniui
  2. iOS学习之判断是否有网络的方法
  3. arcgis制作兴趣点分布图
  4. Neo4j 查询已经创建的索引与约束
  5. ACM/ICPC 之 并查集-食物链(POJ1182)
  6. Jmeter—6 CSV Data Set Config 通过文件导入数据
  7. Firefox SVG getBBox方法返回'NS_ERROR_FAILURE'错误分析
  8. C#&java重学笔记(函数)
  9. CentOS设置服务开机启动的方法
  10. 常用的css的技巧
  11. think straight系列读书笔记之《暗时间》
  12. 关于cocos2d这个东西
  13. 提升PHP速度的53个建议
  14. C# winfrom 模拟ftp文件管理
  15. android L新控件RecyclerView具体解释DeMo
  16. css3布局属性flex
  17. 必须知道的Java八大排序算法
  18. 使用IDEA部署项目到远程服务器
  19. phpcms 路由配置
  20. ES6知识整理(8)--Promise对象

热门文章

  1. LeetCode 5282. 转化为全零矩阵的最少反转次数
  2. alloc 和 init都做了什么验证。
  3. css实现对勾
  4. SpringBoot入门简介(一)
  5. Swoole高效跟传统的web开发有什么区别?
  6. 面试官:如果 http 响应头中 ETag 值改变了,是否意味着文件内容一定已经更改
  7. 学习ThinkPHP的第21天---关联预载入、关联统计
  8. 服务容错保护hystrix
  9. Cookie俩步操作实现n天免登陆
  10. nginx学习(一):安装nginx