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>/表達式/單獨出現時,不要用雙引號替換,結果會有誤。

                                      

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