awk补充

awk补充,第1张

概述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/pas

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的用户为:\n"}$NF=="/bin/bash"{print $1,$3}‘ /etc/passwd
    awk -F: ‘BEGIN{printf "shell程序为bash的用户为:\n"}$NF=="/bin/bash"{print $1,$3}END{printf "end\n"}‘ /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"\t";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) 替换该行所匹配到的所有值
    split(x,x) 指定分隔符去切割文件
    netstat -tan | awk ‘/^tcp\>/{split($5,ip,":");print ip[1]}‘

  2、自定义函数

总结

以上是内存溢出为你收集整理的awk补充全部内容,希望文章能够帮你解决awk补充所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1022381.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存