Linux平常之命令awk

 

參考:http://www.zsythink.net/archives/tag/awk/正則表達式

 

一. 命令awk簡介編程

    1. awk是一種編程語言,用於對文本和數據進行處理的數組

    2. 具備強大的文本格式化能力bash

    3. 利用命令awk,能夠將一些文本整理成爲咱們想要的樣子編程語言

    4. 命令awk是逐行進行處理的spa

 

二. grep、sed、awk的簡單比較.net

    1. 命令grep,更適合單純的查找或匹配文本命令行

    2. 命令sed,更適合對匹配到的文本進行編輯3d

    3. 命令awk,更適合文本格式化,對文本進行較複雜的格式處理blog

 

三. 命令awk基本語法

    awk [options] 'pattern{action}' file

   1. 在沒有options和pattern的狀況下,使用命令awk

    

    2. pattern包括兩種特殊模式,分別是BEGIN和END

    (1)BEGIN模式,是指命令在處理文本以前執行

    

    (2)END模式,是指命令在處理文本以後執行

              

    (3)BEGIN模式和END模式同時存在時,其中,BEGIN與END之間的{}至關於一個循環體,對文件中的每一行進行處理

    

  3. 經常使用的參數

    (1)-F,用於指定輸入分隔符

    

    (2)-v,用於設置變量的值

    

    

      從文件中輸入變量

    

 

四. 變量

  awk中的變量分爲內置變量和自定義變量兩種

  1. 內置變量

FS 輸入字段分隔符,默認爲空白字符
OFS 輸出字段分隔符,默認爲空白字符
RS 輸入記錄分隔符(輸入換行符),指定輸入時的換行符
ORS 輸出記錄分隔符(輸出換行符),指定輸出時的換行符
NF 當前行的字段數(當前行被分隔符分割成了幾段)
NR 當前行的行號
FNR 不一樣文件分別計數
FILENAME 當前文件名
ARGV 數組,保存的是命令行所給定的各參數
ARGC ARGC數組的個數

 

 

 

 

 

 

 

    

 

  (1)FS:以「:」爲字段輸入分隔符,輸出第1列和第2列

      1)使用-F選項指定輸入分隔符

    

      2)使用內置變量FS指定輸入分隔符,須要注意的是,使用變量時,要使用-v選項來指定對應的變量

    

    (2)OFS:以「#」爲字段輸出分隔符,輸出第1列和第2列

    

    (3)RS:以「:」爲行輸入分隔符,輸出對應的行號和當前行內容。

      須要注意的是,兩個紅框中的內容,因爲Jack和DEF、Alice和GHI之間沒有「:」,因此在awk中被認做爲同一行

    

    (4)ORS:以「---」爲行輸出分隔符

    

    (5)NF:當前行的字段數

      其中,$NF表示的是最後一個字段的內容,$(NF-1)表示的是倒數第二個字段的內容

    (6)NR:當前行號

    (7)FNR:不一樣文件分別計數

    

    (8)FILENAME:顯示當前行的文件名

    

    (9)ARGV:數組,保存的是命令行所給定的各參數

    

    (10)ARGC:保存的是ARGV數組的個數

    

  2. 自定義變量

    (1)使用-v來自定義變量(在上第三節已介紹)

    (2)在awk中直接定義

    

   

五. 格式化中,awk使用printf時須要注意的問題

  1. 使用printf輸出的文本不會換行,若是須要換行,能夠在對應的「格式替換符」後加入「\n」進行轉義

  2. 使用printf輸出時,「指定的格式」與「被格式化的文本」之間,要用「,」隔開

  3. 使用printf輸出時,「格式」中的「格式替換符」必須與「被格式化的文本」一一對應(個數要相同)

 

六. awk中的pattern模式

  當awk進行逐行處理時,會把pattern做爲條件,判斷當前行是否知足條件,若跟pattern匹配,則進行後面的處理,不然,跳過當前行。

  

  1. 正則表達式

    awk下的正則表達式與grep下的區別:

    1)awk下:   awk '/正則表達式/{print}' /etc/passwd

    2)grep下:  grep "正則表達式" /etc/passwd

    

    須要注意的是 

      1)在awk的正則表達式中,若出現"/",則須要進行轉義,在其前面加"\"

      2)當使用{x,y}類型次數匹配的正則表達式時,須要使用--posix選項或--re-interval選項

  2. 行範圍匹配

    awk '/正則表達式1/,/正則表達式2/{action}' file

    表示的是,從被正則表達式1匹配到的行開始,到被正則表達式2匹配到的行結束,之間全部的行都會執行對應的動做。

 

七. 關係運算符

關係運算符 含義 用法實例
< 小於 x<y
<= 小於等於 x<=y
> 大於 x>y
>= 大於等於 x>=y
== 等於 x==y
!= 不等於 x!=y
~ 匹配 x~/正則表達式/
!~ 不匹配 x!~/正則表達式/

 

 

 

 

 

 

 

 

 

八. 條件判斷

if(表達式)
    {語句1}
else if(表達式)
    {語句2}
else
    {語句3}

  實例

awk 'BEGIN{ 
    test=100; 
    if(test>90){
         print "very good";
    } 
    else if(test>60){
        print "good"; 
    } 
    else{ 
       print "no pass"; 
    } 
}'

  

九. 循環語句

  1. while循環語句

while(表達式)
    {語句}

  實例

awk 'BEGIN{
    test=100;
    total=0;
    while(i<=test){
        total+=i;
        i++;  
    }         
    print total;              
}'

  2. for循環語句

    1)第一種

for(變量 in 數組)
    {語句}

    2)第二種

for(變量;條件;表達式)
    {語句}

  3. do循環語句

do
    {語句}
while(條件)
相關文章
相關標籤/搜索