awk

一,awk介紹

  1. awk:報告生成器,格式化文本輸出

  2. 基本用法

    a. awk程序通常由 BEGIN語句塊,模式匹配的通用語句塊,END語句塊,這三部分組成

    b. 選項

             -F:指明輸入時用到的字段分隔符

             -v :指定變量

二,awk語言

  1. 分隔符,域和記錄

    a. awk執行時,有分隔符分隔的字段爲域,標記爲$1,$2...$n

        $0爲所有域          和shell中變量$含義不同

    b. 文件的每一行爲記錄

    c. 不指定域,默認執行print $0

    print1.png

三,awk工作原理

  1. 執行順序

    a. 執行BEGIN語句塊

    b. 逐行掃描文件,執行模式匹配語句塊,從第一行到最後一行

    c. 執行END語句塊

    這三個語句塊都是可選語句塊

  2. print格式

    print item1,item2,..

    a. 逗號爲分隔符

    b. 輸出的item可以是字符串,數值,當前記錄的字段,變量或者awk的表達式

    c. 省略item,相當於print $0

    print2.png

四,awk變量

  1. 內置變量

    FS:輸入字符分隔斷,默認爲空白字符

    OFS:輸出字段分隔符,默認爲空白字符

    變量1.png

    RS:輸入時的換行符,原換行符仍有效

    變量2.png

    ORS:輸出時用指定的符號代替原換行符

    變量3.png

    NF:字段數量

    變量4.png

    NR:行號

    FNR:分別顯示每個文件的行號

    變量5.png

    FILENAME:當前的文件名

    ARGC:命令行參數的個數,本身算第一個參數

    ARGV:數組,AGRV[下標數],AGRV[0]是awk

    變量6.png

  2. 自定義變量

    a. -v var=value

    b. 可以在模式語句塊中直接定義

    自定義變量.png

    自定義變量1.png

五,printf命令

  1. 格式化輸出

    a. 必須指定格式符

    b. 不自動換行,需要給出換行控制符,\n

    c. 需要分別給每個item指定格式符

  2. 格式符

    %d:顯示十進制整數

    %f:顯示爲浮點數

    %s:顯示字符串

    %u:顯示無符號整數

    %%:顯示%本身

    printf.png

  3. 修飾符

    #[.#]:第一個#控制顯示的寬度,第二個#表示小數點後精確度

    -:左對齊

    +:顯示數值的正負符號

    print3.png

  4. 操作符

    a. 邏輯操作符

             && , || , !

             條件表達式

                 ?if-true:if-false

    操作符1.png

    b. 算數操作符

             +,-,*,/,%,^

             -x:轉換爲負數

             +x:轉換爲數值

    c. 賦值操作符

             =,+=,-=,*=,/=,%=,^=

             ++,--

    d. 比較操作符

             ==,!=,>,>=,<,<=

    e. 模式匹配符

             ~:左邊是否和右邊匹配包含

             !~:是否不匹配

    操作符.png

六,模式匹配

  1. 未指定,匹配每一行

  2. / /,僅處理能模式匹配到的行

  3. 關係表達式,結果爲真進行處理

  4. / /,/ /,行範圍,不支持直接給出數字格式

  5. BEGIN/END模式

    BEGIN{}:僅在開始處理文件中的文本之前執行一次

    END{}:僅在文本處理完成之後執行一次

    beginend.png


    看幾個例子,更好的理解有關變量真假的情況seq.png

    seq1.png

    seq2.png



七,awk控制語句

  1. if( ){ }else if( ){ }        else if 要打全,跟腳本里的不一樣

    if.png

  2. while(){}

    條件爲真進入循環,爲假退出循環

    對一行內的多個字段逐一類似處理時可使用

    對數組中的各元素逐一處理時可使用

    while.png

  3. do{}while()

    無論真假,先執行一次循環體

  4. for(){}

    for(變量 in 數組){}:遍歷數組中的元素

    for.png

  5. next

    提前結束對本行處理而直接進入下一行處理(awk自身循環)

    next.png

八,awk數組

  1. 可使用任意字符串,字符串要使用雙引號括起來

  2. 如果某數組元素事先不存在,引用時,awk會自動創建元素

    數組.png

九,awk函數

  1. 數值處理

    srand() [種子,沒有rand無法執行] rand():返回0和1之間一個隨機數

    int():取整數

    hs.png

  2. 字符串處理

    length([s]):指定字符串的長度

    sub(r,s,[t]):r是被替換的內容,s是替換的內容,t是字符串(可選),只替換匹配到的第一個內容

    gsub(r,s,[t]):r是被替換的內容,s是替換的內容,t是字符串(可選),替換所有匹配到的內容

    split(s,array,[r]):s是字符串,r是分隔符,用來分隔s,array是數組,元素爲分隔後的字符串

    函數.png

    函數1.png

  3. 自定義函數

    函數名( ){

    ...

    }

十,awk腳本

  1. 將awk程序寫成腳本,直接調用或執行

  2. 在awk中調用shell命令,需用system

    空格分隔,除了awk的變量其他都用""引用起來

    腳本.png

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