shell awk

来源:互联网 发布:酷云eye收视数据猎场 编辑:程序博客网 时间:2024/05/21 13:59

三种方式调用awk

1 awk [opion] 'awk_script' input_file1 [input_file2....]

           -F fs :使用fs作为输入记录的字段分隔符,如果省略该选项,使用默认

           -f filename :从文件filename中都取awk_script

           -v var=value: 为awk_script 设置变量

2 将awk_script放入脚本文件并以#!/bin/awk -f作为首行,给予该脚本执行权限

3将所有的awk_script插入一个单独脚本文件,调用,awk -f wak脚本文件

 

awk 命令的一般形式:

          awk 'BEGIN {actions}

                 awk_pattern1 {actions}

                  .........

                  END {actions} ' inputfile

awk 的运行过程:

      如果BEGIN区块存在,awk执行它指定的actions

      awk从输入文件中读取一行,称为一条记录。

      awk将读入的记录分割成字段,将第1个字段放入变量$1

      把当前输入记录依次与每一个awk——cmd中awk_pattern比较。

      这个过程一直持续,到awk读取都文件尾。

       当awk读完所有的输入行后,如果存在END,就执行相应的actions.

      inputfile 可以是多余一个文件的文件列表,awk将按顺序处理表中的每个文件。

 

awk_pttern 可以是以下几种类型

1.正则表达式用作awk_pattern:/regexp/

   awk中正则表达式匹配操作中经常用到的字符:

  \ ^ . [] * // 通用的regexp元字符

  +:匹配其前的单个字符一次以上,不适用grep或sed

  ?:匹配其前的单个字符1次或0次,不适用grep 或sed

2 布尔表达式用作awk_pattern

      表达式可以使用变量和/regexp/

       布尔表达式中的操作符:关系操作符,匹配操作符

 actions 就是对awk读取的记录数据进行操作。

 

awk的命令

         print 参数列表;print 可以打印字符串,变量,表达式,是awk最基本的命令。

         printf 个时候打印命令,语法与C语言的printf函数类似。

         next:强迫awk立即停止处理当前的输入文件而处理输入文件列表的下一个文件。

         nextfile:强迫awk立即停止处理当前的输入文件而处理输入文件列表中的下一个文件

         exit:使awk停止执行而跳出,如果有END存在,awk会执行END的actions.

awk的语句:awk的语句主要是赋值语句,用来给变量赋值。

         把直接值或一个变量值赋值给变量。如果直接值是字符串要加双引号。

            awk 'BEGIN {x=1 y=3 x=y print "x="x "y="y}'

        把一个表达式的赋值给变量。表达式一般式数值表达式,也可以是其他表达式。

              num1 operator num2

              当num1或者num2是字符串而不是数字时,无论是否加有双引号,awk都视其值为0

              awk 'BEGIN {x=3 x+=2 y=x+2 print "x="x "y="y}'

              awk 'BEGIN {x=3 y=x>4?"OK":4 print "x=" "y="y}'

awk的变量

       awk内部变量:awk的内部变量用于存储awk运行时的各种参数,

                              自动内部变量:

                                 NF:当前输入字段的字段数

                                 NR:对当前输入文件而言,已经被awk读取过的记录的数目。

                                 FNR:已经被awk读取过的记录的总数目。

                                 FILENAE:当前输入文件的文件名

                                 ARGC:命令行参数个数

                                 ARGIND:当前被处理的文件在数组ARGV内的索引

                                 FS:输入记录的字段分隔符

                                 OFS:输出记录的字段分隔符

                                 OFMT:数字的输出格式

                                 RS:输入记录间的分隔符

                                 ORS输出记录间的分隔符

                                  ARGV:命令行参数数组

                                 ENVIRON:存储系统当前环境变量值得数组,

自定义变量

     定义变量:varname=value

 

awk的内置函数

    int(x) 求出X的整数部分,

    sqr(x) 求出x正德平方根值。

    exp(x) 求出x的次方。eg:exp(x) 即是求e*e

    log(x) 求出x的自然对数

    sin(x),cos(x),atan2(y,x)

    rand();

   srand(x);

   index(in,find)

   length(s)

   match(s,r);

  sprintf();

   substr(str,st,len);

   split(s,a,fs);

   tolower(str);

   toupper(str);

   close(filename );

   system(command)

    

自定义函数

自定义函数的格式:自定义函数可以在awk 程序的任何地方定义,

                               function fun_name(parameter_list){body-of-function}

                               awk ‘{print "sum=",SquareSum($1,$2)}

                               function SquareSum(x,y){sum=x*x+y*y return sum}' test.txt

awk 数组:使用前,不必预先定义,也不必指定数组元素个数。

                   访问数组元素:for(element in array_name) print array_name[element]

                                              awk 'BEGIN{print split ("123#456#789",mya,"#") for(i in mya){print mya[i]}}'

0 0
原创粉丝点击