zoukankan      html  css  js  c++  java
  • awk补充

    4、模式匹配(地址定界)
      1、空值,没有定义,默认就将文件中所有的行,放入awk进行循环
      2、对固定的1-3行进行操作
        sed -n '1,3p' /etc/passwd
        awk '1,3{print}' /etc/passwd(错误用法) //awk默认不支持使用1-3 1,3这样数值的直接写法
        awk 'NR>=1&&NR<=3{print}' /etc/passwd //通过NR变量来指定
      3、/pat1/
        sed -n /r..ter/p /etc/passwd
        awk '/r..ter/{print}' /etc/passwd
      4、/pat1/,/pat2/ 第一次匹配pat1到第一次匹配pat2之间的行
        awk '/sshd/,/over/{print}' /etc/passwd

        练习:判断/^r..ter/,/^user.*>/之间的行的用户,是bash的用户,并显示用户的用户名,和UID
          awk -F: '/^r..ter/,/^user.*>/{if($NF==/bin/bash);print $1,$3}' /etc/passwd
      5、模式匹配可以直接使用判断语句
        awk -F: '$NF=="/bin/bash"(print $1,$3)' /etc/passwd
      6、BEGIN和END
        BEGIN定义在默认循环进行操作前所要执行的语句;
        awk -F: 'BEGIN{printf "shell程序为bash的用户为: "}$NF=="/bin/bash"{print $1,$3}' /etc/passwd
        awk -F: 'BEGIN{printf "shell程序为bash的用户为: "}$NF=="/bin/bash"{print $1,$3}END{printf "end "}' /etc/passwd


    5、操作符
      运算操作符:
        + - * / %(取模) ^(幂) //(向下取整)
      比较运算符:
        == != > < >= <= ~!~

      逻辑操作符:
        &&
        ||
        !
      赋值操作符:
        = += -= /= *= %= ^= //=
      条件表达式:
        条件语句?条件成立语句;条件不成立的语句

    6、常见action
      print、printf以及其它任何命令的操作都是action
      1、expressions 常见表达式
      2、control、statement控制语句 例如:if、while等
        逻辑关系语句判断来进行结合
      3、组合语句compound、statements
        /pat1/{{}{;}}
      4、input、statements 输入语句
      5、output、statements 输出语句


    7、常见语言(if while do for break continue delete switch)
      1、if语句
        语法格式:if(条件表达式){执行语句}
        if(条件语句){执行语句}else{执行语句}
        awk '/^title/{if(NF<=2){print}else{print "参数太少"}}' /boot/grub/grub.conf
        awk '/^title/{if(NF>=2){print &4}' /boot/grub/grub.conf

      2、while语句
        只有对行参数进行遍历的时候才使用while语句
        语法格式:while(条件表达式){循环体}

        练习:过滤grub.conf文件中kerne这一行,然后每一个参数的字符个数进行统计,并显示出来
          awk '/^[[:space:]]*kernel>{i=1;while(i<=NF){print length($i);i++}}' grub.conf

      3、for语句
        语法格式:for(初始值,条件判断;初始值控制语句){循环体}
        awk '/^[[:space:]]*kernel>/{for(i=1;i<=NF;i++){printf $i" ";print length($i)}}' grub.conf
        循环建议使用for语句

        在awk中,for语句也可以使用和shell中一样的格式:
        for(i in 列表){循环体}
        echo "liang hao tian shi ge guai bao bao"

      4、do-while循环
        语法格式:do{循环体} while(循环条件)
        注意和while的区别:while语句只有在满足条件的时候,才会进入循环,而do-while会先执行循环体(一次,再进行条件判断)

      5、循环跳出语句
        break[n] 跳出n次循环
        continue 跳出本次循环
        next 跳出默认的当前循环
        awk '{if(NR%2==1){next}else{print}}' /etc/passwd

      6、switch类似于case
        语法格式:
        switch(表达式){case 模式匹配值:执行语句;case 模式匹配值:执行语句;...default:执行语句}


    8、数组
      在awk中,数组和shell中的数组特性相同;
      注意:awk中数组不用定义,只要使用了,就有值为空的默认数组,这在做数据统计的术后非常常见!!!
      行遍历 --> 实际上就是整个文件的遍历
      列遍历 --> 取对象固定某列中的,相同数据的统计
      注意:数组通过for语句,再给其它变量进行赋值的时候,赋值的是index索引信息;

    9、函数
      1、内置函数
        函数的调用:funcation(参数)
        length() 统计字符串长度
        数学运算上使用的函数,例如:sin()、cos()、tan()
        sub(x,x,x) 替换第一个匹配到的值
        awk '{print sub(o,O,$1)}' /etc/fstab //将文件中第一列的o替换为O
        gsub(x,x,x) 替换该行所匹配到的所有值
        split(x,x,x) 指定分隔符去切割文件
        netstat -tan | awk '/^tcp>/{split($5,ip,":");print ip[1]}'

      2、自定义函数

  • 相关阅读:
    Cygwin一些设置总结!
    【补题】牛客58矩阵消除【数据水的一匹,算法:二进制枚举】
    【补题】牛客58E题(数学)
    [补题]牛客练习56,迷宫【orz】
    【补题】牛客58E题(数学)
    判断两个二叉树是否相同
    判断两个二叉树是否相同
    利用费马小定理求逆元
    [补题]牛客练习56,迷宫【orz】
    【补题】牛客58矩阵消除【数据水的一匹,算法:二进制枚举】
  • 原文地址:https://www.cnblogs.com/4443056bdH/p/11397915.html
Copyright © 2011-2022 走看看