zoukankan      html  css  js  c++  java
  • awk

    1、awk介绍

      全称:Aho Weinberger Kernaighan 三个人的首字母缩写

      grep 行过滤器

        -o -i -v取反 -E正则表达式  grep egrep fgrep(匹配速度最快)

      sed 行编辑器

        -n p  1、地址定界 2、命令 p a i w c s/pat/str/  g|&

      awk 报告生成器

        通过模式匹配以及自己本身的语言格式,来获取,并输入

      【默认情况下,三个工具都不去编辑源文件】

      FS=" "指定分隔符

      

    2、awk原理

     

    3、awk用法

       awk 选项 ... 'program'  file...

      1、program 必须使用!单引号!

      2、多条program语句使用大括号包含起来,可以并列,可以嵌套

      awk '{print}' /etc/passwd 

    4、potion

       -F   指定分隔符

      awk -F[/:] '{print $1,$3}' a.txt

          其中[ ]内表示多个字符中的任意一个

      -v     因为awk是一种语言编辑器,能自己定义变量,同时也有内置变量(与环境变量类似)

        手动指定变量参数

      awk -v a="a/b" '{print }' a.txt

        给a赋值,打印a这个变量

        1、a是自定义变量 -v FS=":"

        2、在awk中调用变量 不用加¥符号

      awk '{a="a/b";print a}' a.txt

      扩展: 了解cut 与awk的区别

    5、awk自己的固定语法语句

      1、print

        默认输出(在屏幕上)

        在awk中没有保存命令,我们可以关联别的命令来保存awk的结果

        awk '{a="a/b";print a}' a.txt | tee a.bak

      2、printf ---实现格式化输出

      格式符

      %s 字符串

      %d %i 数值

       %e %E  科学计算数值

       %c Acsii码值

      %f 浮点数

      %u 无符号整数

       %%  逃逸符  只显示%自己

      修饰符

      默认为右对齐

      - 代表左对齐

      %5.4f

      5 所占位属

      4 所取小数位

      

      3、变量(内置变量、自定义变量)

      内置变量 ---环境变量(bash)(env、set -C +C)

      awk语言所默认支持的变量

      FS  定义输入分隔符的变量

      OFS    定义输出分隔符的变量

      NF  定义行分割以后的参数个数($NF 分割以后最后一列的变量)

          变量引用的时候不用加$,$0,$1....$n

      

      NR  定义文件的行数,定义多个文件的文件行,行号叠加

      FNR  文集只计算自己的行号

      

      begin{语句}只在行循环开始时,执行一次

      ARGC 整个命令的段数  [注意:不包含'program'本身]

      ARGV 数组,用来调用命令中,指定的段ARGV[2] 【注意:数组中也不包含'program'】

      RS  指定换行符  可以指定新的换行符,不影响本身的换行

      ORS 输出的时候指定的换行符,将默认换行符替换为指定字符

      

      自定义变量

        -v 变量=值

        在后面'program'中去调用自定义变量时,直接使用即可或者将“变量=值”语句直接写                  在’program‘亦可

      

      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 /pat1/p /etc/passwd

      awk '/r..ter/{print}' /etc/passwd

      4、/pat1/,/pat2/  第一次匹配pat1到第一次匹配pat2,之间的行

      

      5、模式匹配可以直接使用判断语句

      awk -F:'$NF=="/bin/bash"{print $1,$3}' /etc/passwd 

      6、BEGIN在默认循环进行操作前所要执行的语句;

      

      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 )

        1、if语句

            语法格式:if(条件表达式){执行语句}

              if(条件表达式){执行语句} else {执行语句}

          awk '/^title/{if(NF<=2) {print}else {print "参数过少"}}' /boot/grup/grup.conf

          awk '/^title/{if(NF>=2) print $4}' /boot/grup/grup.conf

        2、while语句

          只有对行参数进行遍历的时候才会使用循环;

          语法格式:while(条件表达式){循环体}

         

         

          

      8、数组

      在awk中,数组和shell中的数组特性相同

          注意:awk中数组不用定义,只要使用了,就有值为空的默认数组;这在做数据统计的时候非常常见!!!!!

        行遍历 - -->   实际上就是整个文件的遍历

        列遍历  ---->   取对象固定某列中的相同数据的统计

          注意:数组通过for语句再给其他变量进行赋值的时候,赋值的是index索引信息;

      9、函数

         1、内置函数

          函数的调用:funcation(参数)

          length()  统计字符串长度

          数学运算上使用的函数  sin()  cos().....

          sub(x,x,x)  替换第一个匹配到的值

          

          gsub(x,x,x)  替换该行所匹配道德所有值

          split(x,x,x)  指定分隔符去切割文件

        2、自定义函数

  • 相关阅读:
    测试覆盖(率)到底有什么用?
    重构遗留程序的一次案例学习(java程序)
    rsync学习
    一次awk脚本的重构
    哪本书是对程序员最有影响、每个程序员都该阅读的书?
    我的阅读编程书籍的好方法
    领域驱动设计和实践
    不要if else的编程
    编码规范的要点
    最牛B的编码套路
  • 原文地址:https://www.cnblogs.com/yjkyjk/p/11391202.html
Copyright © 2011-2022 走看看