• (6)修改字段或NF引起的$0重新计算


    修改字段或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重新计算的操作,都会立即使用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
  • 相关阅读:
    微信平台的开发与集成
    自定义控件定义样式
    Android万能分辨率适应法
    Openfire配置过程,以及与php交互注意事项。
    Android 最近的一些新的功能
    自定义Ratingbar 评分控件
    解决android有的手机拍照后上传图片被旋转的问题
    Fragment 嵌套使用 Activity has been destoryed
    实现图文混排方法 类似于网易那样的
    Android 自定义View及其在布局文件中的使用示例
  • 原文地址:https://www.cnblogs.com/liujunjun/p/12389767.html
Copyright © 2020-2023  润新知