AWK使用

awk是一个强大的文本分析工具。相对grep sed awk显得更屌炸。


[root@localhost pangbing]# awk -Wversion  或是awk --version

         GNU Awk 3.1.7

         Copyright (C) 1989, 1991-2009 Free SoftwareFoundation.

 


2.
域和记录
    
    
域的标记为$1 $2 $3.....。这种方法称为域标识。
    $0表示所有域 。例子:awk '{print $0}'文件名
    
    
例子:awk '{print $0}'文件名>文件名| tee文件名

    管道前边的结果会直接输出到文件,不会输出到屏幕上。tee命令就是能同时让结果输出到屏幕上。

       打印不同的域,中间用逗号隔开

     例子:'{print$1,$3,$7}'


3.awk匹配正则表达式
    

    元字符: 这里是a w k中正则表达式匹配操作中经常用到的字符:

          \ ^ $ . [] [^] | () * +?
    
条件操作符

    
9 - 2给出a w k条件操作符,后面将给出其用法。
    
    
9-2 awk条件操作符
                        

     <          
小于            >=          大于等于

     <=         
小于等于       ~          匹配正则表达式

     ==         
等于           !~         不匹配正则表达式

     !=          
不等于

<1> 匹配
    
为使某一域号匹配正则表达式,使用符号后紧跟正则表达式
    
    
例子:

awk  /root/ /etc/passwd这个是简单的写法 passwd文件中只要含有root的行就打印出来

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

operator:x:11:0:operator:/root:/sbin/nologin

    

awk -F:  '$1~/root/' /etc/passwd意思是以:

为分隔符号,打印第一段(区域)匹配含有root的行

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

 

awk -F: '$3~/0/' /etc/passwd意思是以:为分隔符号,打印第三段(区域)匹配含有0的行

 

awk -F: '$3=="0"' /etc/passwd意思是以:为分隔符号,打印第三段(区域)匹配是0的行这时精确匹配)

 

<2>. 精确匹配

为精确匹配48,使用等号==并用单引号括起条件。例如$3==“48”,这样确保只有4 8
序号得以匹配,其余则不行。

awk -F: '$3~/0/' /etc/passwd意思是以:为分隔符号,打印第三段(区域)匹配含有0的行

    

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

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin

    pangbing:x:500:500:pangbing:/home/pangbing:/bin/bash

    

awk -F: '$3=="0"' /etc/passwd意思是以:为分隔符号,打印第三段(区域)匹配只是0的行这是精确匹配)

                                                         ################

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

 

awk '/^ /'文件名      匹配以空格开头的行

awk '/^ | ^#/' httpd.conf匹配空格开头的或者是^#开头的

awk '!(/表达式1/ && /表达式2/)' /etc/passwd 表示取反


<3>不匹配
     awk -F: '$3!="0"' /etc/passwd
     awk -F: '$3!~/0/' /etc/passwd
<4>比较

     awk -F: '$3>=$4' /etc/passwd

 

4.计算

     

[root@localhostpangbing]# cat 1

         1  11

         2  12

         3  14

         4  22

  •     

     <1>求和

   格式:awk '{变量名+=第几列}END{print变量名}'文件名

     [root@localhost pangbing]#awk '{sum+=$1}END{print sum}' 1

         10

     [root@localhostpangbing]#awk '{sum+=$2}END{print sum}' 1

         59

    

     <2>求平均值

     格式:awk '{变量名+=第几列}END{print变量名/NR}'文件名

    

     [root@localhostpangbing]#awk '{a+=$2}END{print a/NR}' 1

         14.75

 

5.多条件同时匹配

     [root@localhost pangbing]# cat 1

         1  11 

         1  12 asd fff

         1  13 2

    

     同时匹配多个条件

     格式:awk '条件1&&条件2&&条件...'文件名

     [root@localhostpangbing]# awk '$1~/1/ && $2~/12/' 1     

                               awk'$1~"1" && $2~"12"' 1    //也可以用""代替

         1  12 asd fff

    

     <1>前提是用 匹配时可以用双引号替换//

          

    <2>/表达式/单独出现时,不要用双引号替换,结果会有误。

                                      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章