zoukankan      html  css  js  c++  java
  • Awk读书笔记

    1.awk 'parttern {action}' filename
    从文件中逐行读取并匹配parttern,若匹配成功执行action否则读取下一行.
    parttern和action都可选,若省略parttern则对每行都执行action.BEGIN和END不能省略action.
    parttern {action}语句,及action内的语句通常用换行符分隔,若干语句在同一行时用分号分隔.
    左大括号{必须与parttern在同一行,右大括号}位置不限.其中的空行被忽略.
    空格与制表符可以成对出现在运算符与操作数周围以提高可读性.
    #注释任一行.
    2.当前输入行的第一个字段为$1,第二个字段为$2...当前行为$0.字段默认分隔符为空格或制表符.
    3.在print语句中默认以逗号分隔表达式,{print $1,$2}
    4.内置变量不需通过$引用
    NF:Number of Field,每行的字段数.$NF可以表示最后一个字段值.
    NR:Number of Record,到目前为止读取到的记录(行)数.
    FNR:当前输入文件的记录个数.
    FS:Field Separator,(输入行)字段分隔符.默认为空格.
    OFS:Output Field Separator,输出行字段分隔符.默认为换行符( ).
    RS:Record Separator:输入行分隔符.默认为换行符.
    ORS:Output Record Separator:输出行分隔符.默认为空格.
    ARGC:命令行参数的个数.
    ARGV:命令行参数数组.
    FILENAME:当前输入文件名.
    OFMT:数值的输出格式,默认为%.6g
    RLENGTH:被函数匹配的字符串的长度.
    RSTART:被函数匹配的字符串的开始.
    SUBSEP:下标分隔符.默认为34.
    5.parttern汇总
    BEGIN {action}:在输入行被读取之前执行action一次.
    END {action}:在输入行读取完成之后执行action一次.
    expression {action}:若expression为真则输入行执行action,否则跳过.
    /regexpr/ {action}:若输入行匹配正则表达式则执行action,否则跳过.
    compexpr {action}:若复合表达式(由&&、||、!、())为真则输入行执行action,否则跳过.
    parttern1,parttern2 {action}:对匹配parttern1开始到匹配parttern2结束的其间所有行(含这两行)执行action.若parttern2未匹配则从parttern1到末行执行action.
    BEGIN和END不与其他模式组合,一个范围模式不能是其他模式的一部分.
    6.BEGIN常用来更改FS,或打印标题.END用来输出计算结果.
    7.比较运算符
    < 小于
    <= 小于等于
    == 等于
    != 不等于
    > 大于
    >= 大于等于
    ~ 匹配
    !~ 不匹配
    8.字符串匹配模式:测试一个字符串是否包含一段可以被正则表达式匹配的子字符串.
    /regexpr/:当前输入行包含一段能够被rexexpr匹配的子字符串时该模式被匹配.
    expression ~ /regexpr/:若expression的字符串值包含一段能被rexexpr匹配的子字符串时该模式被匹配.
    expression !~ /regexpr/:若expression的字符串值不包含一段能被rexexpr匹配的子字符串时该模式被匹配.
    9.action汇总
    expression:常量,变量,赋值,函数调用等
    print expression-list
    printf(format,expression-list)
    if (expression) statements
    if (expression) statements else statements
    for (expression1;expression2;expression3) statements
    for (expression in array) statements
    while (expression) statements
    do statements while (expression)
    break
    continue
    10.内建函数
    int(x) x的整数部分
    sqrt(x) x的方根
    rand() 返回一个[0,1)的随机数
    srand() x是rand()新的随机数种子
    sin(x) 正弦
    cos(x) 余弦
    log(x) 自然对数
    exp(x) 指数
    11.内建字符串函数
    gsub(r,s) 将$s0中所有r替换为s,返回替换次数
    gsub(r,s,t) 将字符串t中所有r替换为s,返回替换次数
    sub(r,s) 将$0中最左最长能被r匹配的子字符串替换为s,返回替换次数
    sub(r,s,t) 把t的最左最长能被r匹配的子字符串替换为s,返回替换次数
    index(s,t) 返回字符串t和s中第一次出现的位置,若未出现则返回0
    length(s) 返回s包含字符的个数
    match(s,r) 测试s是否包含能被r匹配的子串,返回子串的起始位置或0
    split(s,a) 用默认的FS将s分割到数组a中,返回字段个数
    split(s,a,fs) 用指定的fs将s分割到数组a中,返回字段个数
    sprintf(fmt,expr-list) 根据格式字符串fmt返回格式化后的expr-list
    substr(s,p) 返回s中从位置p开始的后缀
    substr(s,p,n) 返回s中从位置p开始的长度为n的子字符串
    12.表达式运算符
    拼接 (字符串拼接,不存在显示拼接运算符eg:"a" "bc"结果是"abc")
    赋值 =、+=、-=、=、/=、%=、^=
    条件表达式 ?:
    逻辑 &&、||、!
    关系运算 <、<=、==、!=、>=、>
    数组匹配 i
    四则 +、-、
    、/、%
    13.数组
    Awk数组元素的下标是字符串,eg:Array["string"]
    14.函数
    function name([parameter-list]) {
    statements
    [return expression]
    }
    [parameter-list]和[return expression]可选,若没有return则返回值是未定义的.
    用户定义的函数可以在任何parttern-action语句的任何表达式中使用,也可以出现在任何函数体内部.
    每个对函数的使用都叫一个调用call,用户自定义函数调用了自己就是递归recursive.
    一个带有参数$1的函数被调用时($1只是一个普通的变量),函数接收到的参数是变量的值的一份拷贝, 所以函数操作的是变量的拷贝,而不是变量本身.这意味着函数不会对函数体外部的变量的值产生
    影响.(用行话来说, 这样的变量叫做"标量", "按值传递" 给函数)
    当数组作为函数的参数时,函数接收到的参数就不是数组的拷贝,所以函数可以改变数组的元素,或往数组增添新的值(这叫作"按引用传递"). 函数名不能当作参数使用.
    在函数体内部的变量都是局部变量,只在函数执行时才存在.
    14.输出
    print 将$0打印到标准输出
    print exp1,exp2... 打印exp1,exp2之间由OFS分隔,ORS终止
    print exp1,exp2...>filename 输出至文件filename
    print exp1,exp2...>>filename 累加输出到文件filename中,不覆盖之前的内容
    print exp1,exp2... | cmd 输出到管道
    printf(fmt,exp1,exp2...)
    printf(fmt,exp1,exp2...)>filename
    printf(fmt,exp1,exp2...)>>filename
    printf(fmt,exp1,exp2...) | cmd
    close(fillename),close(cmd) 断开print与filename或cmd之间的连接
    system(cmd) 执行cmd,返回值是cmd的退出状态
    15.输入
    awk 'parttern {action}' filename 从文件filename读取
    cmd | awk 'parttern {action}' 从管道读取
    函数getline从当前输入行、文件、管道读取输入.getline抓取下一个记录,按照通常的方式把记录分割成一个个的字段.它会设置NF,NR和FNR;若存在一个记录则返回1,若遇到文
    件末尾则返回0, 发生错误时返回-1(例如打开文件失败).
    p66未完待续

  • 相关阅读:
    Python学习 day01打卡
    Python变量常量及注释
    Python基础简介
    「ubuntu」sudo命令卡住
    「ubuntu」sudo无密码
    「ubuntu」Ubuntu Recovery模式下只读问题
    「ubuntu」在Ubuntu Server 16.04 LTS下安装VMware Tools(转)
    「mysql」设置utf8编码
    「hive」hive2.3.0配置derby
    「hadoop」log4j参考
  • 原文地址:https://www.cnblogs.com/AiYS/p/8698337.html
Copyright © 2011-2022 走看看