awk函数辨析


awk命名基础解析

前言

awk会将传递过来的数据按照一个整体处理的

awk主要有三模块组成:(可以按照junit测试来理解.)

BEGIN{}:开始执行前的准备阶段,可以理解为初始化

PATTERN{}:操作命令

END{}:操作结束后的处理,收尾工作.
  • 样式
    awk 'BEGIN{}{}END{}'

由此我们可以想到: 在BEGIN阶段用于指定按照什么分割传入过来的一行数据.

不多BB直接上案例


  • example
    # 按照","分割 打印出第一列数据(下标从1开始)
    awk 'BEGIN{FS=","}{print $1}'
    
    # 等价写法
    awk -F, '{print $1}'
    
    # 关于\t,就有了一些区别
    # 想如下这样写法
    awk -F\t '{print $1}'
    # 这里的\他是识别不到的,直接把他理解成了t
    # 即:在他的理解里,当前是按照"t"为分割付进行处理的
    # auther: tzkTangXS
    # 那么就有两种处理办法
    # 1.在加上一个反斜杠"\"将这个原来的"\"转义一下,转义成"\"
    awk -F\\t '{print $1}'
    # 2.第二种写法: 使用''号
    awk -F '\t' '{print $1}'
    
    # 讲到了'',那么有一个点就可以提一下:
    # 多分割付操作.不多BB,看例题
    awk -F '[ a]' '{print $1}' tzkTest
    # 这句话的意识就是:
    # 读取tzkTest里的数据.首先按照空格来切割.
    #   再然后按照a类切割
    #   最后输出第一列
    
    
    # exmaple
    # 假如tzkTest里的数据是如下形式(按\t分割):
    # wo heng hao heng shuai
    # wo  ui  ni  lk  gs
    awk -F '[\te]' '{print $2}'
    # terimal
    h
    ui
    awk -F '[\te]' '{print $3}'
    # terimal
    ng
    ni

常用参数解释

  • NR行数(官方语言)一以读出的记录数目
  • NF这一行的列数(字段数目)(官方语言)一条记录的字段数目
  • FS指定分隔符
  • $n指定第几列(字段)

文章作者: tzkTangXS
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 tzkTangXS !
  目录