zoukankan      html  css  js  c++  java
  • AWK笔记

    awk '匹配模式 {动作}'

    1. 每个awk程序都是一个或多个模式-动作语句:pattern { action } 如与BEGIN{},END{}多个模式-动作并存

    2. 模式和动作可以省略其中之一

    3. 模式和动作写在单引号中

    4. 使用大括号包围动作,以与模式区分开

    5. 多个动作写在一行时,通过;隔开

    6. 在 awk 中仅仅只有两种数据类型: 数值和字符构成的字符串

    7. Awk 程序一次从输入文件的中读取一行内容并把它分割成一个个字段, 通常默认情况下, 一个字段是一个不包含任何空格或制表符的连续字符序列.

    8. 每行的字段数量存储在NF变量中

      {print NF}
      
    9. 已经读取的行数存储在NR变量中

      {print NR}
      
    10. 匹配模式可以是数值计算($1*$s>10),正则(/正则/),也可以用&& || ! 对模式进行组合

    执行顺序

    执行顺序:检测输入行是否符合匹配模式,如果符合就执行相应的动作

    BEGIN和END

    1. 特殊模式 BEGIN 用于匹配第一个输入文件的第一行之前的位置

    2. BEGIN通常放在''内的开始的地方

    3. END 则用于匹配处理过的最后一个文件的最后一行之后的位置

    在动作中执行计算

    1. 在动作中用户可以使用自己的变量,而且不需要声明。数字类型的变量默认初始化为0

      $3 > 15 { emp = emp + 1 }
      END     { print emp, "employees worked more than 15 hours" }
      
      $2 > maxrate { maxrate = $2; maxemp = $1 } #自定义变量也可以定义在模式部分,maxrate初始化为0
      

    在动作中执行字符串拼接

     {names = names $1 " "} #将names,第一个字段,空字符拼接成大字符传赋值给自定义变量names
     END { print names }
     
     Beth Dan Kathy Mark Mary Susie
    

    打印最后一个输入行

    {last=$0} END{print last}
    

    内置函数

    length($1) 求字符的长度

    控制语句

    if-else语句
    $2 > 6 { n = n + 1; pay = pay + $2 * $3 }
    END    { if (n > 0)
                print n, "employees, total pay is", pay,
                         "average pay is", pay/n
             else
                 print "no employees are paid more than $6/hour"
            }
    
    while语句
    {   i = 1
        while (i <= $3) {
            printf("	%.2f
    ", $1 * (1 + $2) ^ i) //^ 是指数操作符
            i = i + 1
        }
    }
    
    for语句
    { for (i = 1; i <= $3; i = i + 1)
        printf("	%.2f
    ", $1 * (1 + $2) ^ i)
    }
    

    数组

    {line[NR] = $0 }  # 记下每个输入行,存到数组line中
    
    END { i = NR           # 逆序打印
          while (i > 0) {
            print line[i]
            i = i - 1
          }
        }
    
  • 相关阅读:
    数据库目录
    设计模式
    mysql的索引结构
    ElasticSearch的基本操作
    转:基于Hadoop 的分布式网络爬虫技术学习笔记
    爬虫 es 搜索引擎
    vue+django2.0.2-rest-framework 生鲜项目
    fiddler抓包时显示Tunnel to......443
    安装 Win10 + Ubuntu 双系统过程
    ROS 订阅者的创建及使用
  • 原文地址:https://www.cnblogs.com/henryno12/p/12358354.html
Copyright © 2011-2022 走看看