awk的用法

一、awk命令用法

        在Linux中,awk 即 gawk , awk的二进制文件为gawk的链接文件;

         gawk - pattern scanning and processing language / 模式扫描及处理语言;

        用法: gawk [options]  'pattern{ACTION }'  FILE...

        1、options:     -F: 定义输入字段分隔符,默认字符为空格;

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

       2、常见的输出分隔符:

                            a.print  :

                             格式:    print item1,item2.....       

                             注意: item之间用 逗号分割;item可以是字符串、数值;当前处理行的字段、变量或awk的表达式;

                            b.printf : 按照给定格式输出;

                            格式:printf  FORMAT , item1,item2 

                            注意:FORMAT必须项;如果换行需要手动给出\n;每一个输出的item都需要对应FORMAT中的格式化符号;

                              格式符有:

                                                %d,%i : 显示十进制的整数;

                                                %s : 显示字符串;

                                                %f : 显示浮点数

                                                %c : 显示字符串的ASCII码;

                                                %e,%E : 科学计算法显示;

                                                 %u: 无符号整数;

                                                 %% : 显示%本身;

                            c. 修饰符,对输出进行修饰

                             #,[#] : 分别控制输出item的宽度和精度(小数);

                             -  : 控制输出item 左对齐;

                             +  :控制输出item(数值) 的符号;

       3、awk变量:

                            a. 内置变量

                                    FS :输入字段分隔符

                                    OFS: 输出字段分隔符

                                    NF : number of  fields /行字段数 ;   $NF:最后一个字段的值;

                                    NR : number of record/ 行数

                                    FNR : file of number record /显示每个文件的行数

                                    FILENAME : 显示当前正在处理的文件的名字

                            b.自定义变量

                                   -v  var_name=VALUE


                eg1: ~]# awk -F: '/root\>/{print $1}' /etc/passwd

                                root

                                operator

                                oseroot

               eg2: ~]# awk -v FS=":" '/root/{print $1}' /etc/passwd

                                root

                                operator

                                oseroot

                eg3: 控制输出item的方式               

                eg4:  打印/etc/passwd 的 字段数及最后一个字段的值        

                    ~]# awk -F: '/root/{print NF,$NF}' /etc/passwd

                            7 /bin/bash

                            7 /sbin/nologin

                            7 /bin/bash


4、pattern:AWK patterns may be one of the following:

              空模式 : 匹配每一行

             /regular expression/ : 处理能够匹配到的行

              relational expression :关系表达式,为真时才会被处理;

              pattern && pattern

              pattern || pattern

              pattern ? pattern : pattern

              (pattern)

              ! pattern

              /pattern1/, /pattern2/

     eg1:  ~]# awk '/^root\>/{print}' /etc/passwd

                root:x:0:0:root:/root:/bin/bash

    eg2:  ~]# awk -F: '$3==0{print}' /etc/passwd

                root:x:0:0:root:/root:/bin/bash

    eg3:  ~]# awk -F: '$1~"^root"{print}' /etc/passwd

                root:x:0:0:root:/root:/bin/bash

    eg4:   ~]# awk -F: '/^root\>/,/^bin\>/{print}' /etc/passwd

                root:x:0:0:root:/root:/bin/bash

                bin:x:1:1:bin:/bin:/sbin/nologin

    eg5:  ~]# awk -F: '(NR>=1&&NR<=2){print}' /etc/passwd

                root:x:0:0:root:/root:/bin/bash

                bin:x:1:1:bin:/bin:/sbin/nologin

    eg6:  ~]# awk -F: '!(NR>=2){print}' /etc/passwd

                root:x:0:0:root:/root:/bin/bash

二、awk函数用法

           awk 函数包括内置函数和自定义函数,内置函数比较常用;

           a.  rand() : Return a random number N, between 0 and 1, such that 0 ≤ N < 1

             ~]# awk 'BEGIN{print rand()}'

                0.237788

          b.length(string) : 显示字符串的长度

             ~]# awk -v tmp="helloworld" 'BEGIN{print length(tmp)}'

                10

            ~]# awk -F:  '/^root\>/{print length($1)}'  /etc/passwd

                4

        c.  split(s, a [, r ] ])  : 以r为分隔符分割s, 并将分割后的结果保存在数组a 中 ;

            ##统计外部IP连接的个数

            ~]# netstat -tan | awk '/tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count){print i,count[i]}}'

            0.0.0.0 7

           10.14.5.107 1

你可能感兴趣的:(awk的用法)