Linux:Day17(上) gawk基础

时间:2023-03-08 18:43:27

GNU awk:

  文本处理三工具:grep,sed,awk

    grep,egrep,fgrep:文本过滤工具:pattern

    sed:行编辑器

      模式空间、保持空间

    awk:报告生成器,格式化文本输出;

    AWK:Aho,Weinberger,Kernighan --> New AWK,NAWK

    GNU awk,gawk

  gawk - pattern scanning and processing language

    基本用法:gawk [options] 'program' FILE ...

      program:PATTERN {ACTION STATEMENTS}

        语句之间用分号分隔

        print,printf

      选项:

        -F:指明输入时用到的字段分隔符;

        -v var=value:自定义变量;

    1、print

      print item1,item2,...

      要点:

        (1) 逗号分隔符;

        (2) 输出的各item可以字符串,也可以是数值;当前记录的字段、变量或awk的表达式;

        (3) 如省略item,相当于print $0;

    2、变量

      2.1 内建变量

        FS:input field seperator,默认为空白字符;

        OFS:output field seperator,默认为空白字符;

        RS:input record seperator,输入时的换行符;

        ORS:output record seperator,输出时的换行符;

      

        NF:number of field,字段数量

          (print NF),{print $NF}

        NR:number of record,行数;

        FNR:各文件分别计数;行数;

      

        FILENAME:当前文件名;

        ARGC:命令行参数的个数;

        ARGV:数组,保存的是命令行所给定的各参数;

      2.2 自定义变量

        (1) -v var=value

          变量名区分字符大小写;

        (2) 在program中直接定义

    3、printf命令

      格式化输出:printf FORMAT,item1,item2,...

        (1) FORMAT必须给出;

        (2) 不会自动换行,需要显式给出换行控制符,\n

        (3) FROMAT中需要分别为后面的每个item指定一个格式化符号;

        格式符:

        装饰符:

          #[.#]:第一个数字控制显示的宽度;第二个#表示小数点后面的精度;

            %3.1f

          -:左对齐

          +:显示数值的符号

    4、操作符

      算术操作符:

        x+y,x-y,x*y,x/y,x^y,x%y

        -x

        +x:转换为数值;

      字符串操作符:没有符号的操作符,字符串连接

      赋值操作符:

        =,+=,-=,*=,/=,%=,^=

        ++,--

      比较操作符:

        >,>=,<,<=,!=,==

      模式匹配符:

        ~:是否匹配

        !~:是否不匹配

      逻辑操作符:

        &&

        ||

        !

      函数调用:

        function_name(argu1,arge2,...)

      条件表达式:

        selector?if-true-expression:if-false-expression

    5、PATTERN

      (1) empty:空模式,匹配每一行;

      (2) /regular expression/:仅处理能够被此处的模式匹配到的行;

      (3) relational expresson:关系表达式;结果有“真”有“假”;结果为“真”才会被处理;

        真:结果为非0值,非空字符串;

      (4) line ranges:行范围,

        startline,endline

        /pat1/,/pat2/

        注意:不支持直接给出数字的格式

      (5) BEGIN/END模式

        BEGIN{ }:仅在开始处理文件中的文本之前执行一次;

        END{ } :仅在文本处理完成之后执行一次;

    6、常用的action

      (1) Expressions

      (2) Control statements:if,while等;

      (3) Compound statements:组合语句;

      (4) input statements

      (5) output statements

    7、控制语句

      if(condition) {statments}

      if(condition) {statments} else {statemnets}

      while(condition) {statments}

      do {statments} while(condition)

      for (expr1; expr2; expr3)  {statemnets}

      break

      continue

      delete array[index]

      delete array

      exit

      {statements}