AWK NOTES

AWK


语言结构


  • BEGIN{…}/pattern11/[,/pattern12/]{};/pattern21/[,/pattern22/]{…}END{…}

选项


  • v 变量定义,BEGIN之前定义

内置变量


  • NR 当前记录数
  • NF 当前记录字段数
  • FNR 在当前文件中的记录数
  • FS 字段分隔符
  • RS 记录分隔符
  • OFS 输出字段分隔符
  • ORS 输出记录分隔符
  • RSTART match 函数匹配的开始位置,无匹配为0
  • RLENGTH match 函数匹配的长度,无匹配为-1

数组


  • 一维数组
    • 定义 arr[key] = value
    • 检查key是否在数组
      if(key in arr)...
    • 遍历 for(k in arr) {print arr[k]}
  • 二维数组
    • 定义 arr[k1, k2] = value
    • 检查key是否在数组
      if((k1,k2) in arr)...
    • 遍历
       
      for(k in arr) {
      split(k, tmparr, SUBSEP)
      print tmparr[0], tmparr[1], arr[tmparr[0], tmparr[1]]
      }

内置函数


  • sub(/pattern/, /replace/[,target])
  • gsub(/pattern/, /replace/[,target])
  • match(str, /pattern/[,arr])
    • e.g.
       
      match(hello123, /([a-z]+)([[:digit:]]+)/, arr)
      print RSTART, RLENGTH
      print arr[1, "start"], arr[1, "length"]
      print arr[2, "start"], arr[2, "length"]
  • split(str, /pattern/, arr)
  • length(str)
  • system(“cmd“)
  • print …
  • printf(“format\n”, …)
  • sprintf(“format”, …)
    e.g. v=sprintf("format", ...)
  • substr(str, start[, length])
  • getline 读取下一行覆盖$0, 不回到脚本开头,继续下一步操作
    • e.g.
       
      while("ls"|getline) {
      print $0
      }
  • next 读取希一行覆盖$0,回到脚本头开始处理
  • index(str,substr)

常用示例


  • 计算某列平均值
    BEGIN{sum=0}/pattern/{sum+=$n}END{print sum/NR}
  • 移动当前目录下所有文件到指定目录
    ls -F | grep -v '/$' | awk '{system("mv \""$0"\" dstdir")}'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值