文本處理工具之awk

                文本處理工具之AWK

一、linux文本處理工具三劍客:grep 、sed、 awk。其中grep是一種文本過濾器,sed是文本行編輯器,而awk是一種報表生成器,就是對文件進行格式化處理的,這里的格式化不是文件系統的格式化,而是對文件內容進行各種“排版”,進而格式化顯示。

linux上我們使用的是GNU awk 簡稱 gawk,并且gawk是awk的鏈接文件,因此在系統上使用gawk和awk效果一樣

二、awk的工作原理

    awk在處理文本時也是一次讀取一行文本,然后根據輸入分隔符(默認分隔符為空格符)進行切片,切成n個片,然后將每一片都富裕awk內部的一個變量當中來進行保存,這些變量名為$1,$2,$3,…,$n。awk就可以對這些切片進行單獨處理,比如顯示某一段,還可以對某些短進行額外的加工處理,比如計數、運算等。

三、awk的基本用法

   1、 awk [options] ‘program’ var=value file…
       awk [options] -f programfile var=value file…
       awk [options] ‘BEGIN{ action;… } pattern{ action;… } END{action;… }’ file …
   2、awk 程序通常由: BEGIN語句塊、能夠使用模式匹配的通用語句塊、 END語句塊,共部分組成
   3、program:編程語言,通常是被單引號或雙引號中 

     1) program:pattern{action statements;..} 

     2) pattern:模式部分決定動作語句何時觸發及觸發事件 

     3)action statements對數據進行處理,放在{}內指明 

   4、選項

      -F :指明輸入字段分隔符(默認分隔符為空格符)

      -v :變量賦值

      -f :讀取awk腳本并執行

四、pattern根據pattern條件,過濾匹配的行,再做處理
    (1)如果未指定:空模式,匹配每一行
    (2)/regular expression/:僅處理能夠模式匹配到的行,需要用/ /括起來
    3) relational expression: 關系表達式,結果為“真”才會被處理
        真:結果為非0值,非空字符串
        假:結果為空字符串或0值 

    4)#,# :行范圍,類似sed或vim中的地址界定

    5)BEGIN 、END:兩種特殊的模式

        BEGIN語句塊在awk開始從輸入流中讀取行之前被執行,這是一個可選的語句塊,比如變量初始化、打印輸出表格的表頭等語句通??梢詫懺贐EGIN語句塊中 

        END語句塊在awk從輸入流中讀取完所有的行之后即被執行,比如打印所有行的分析結果這類信息匯總都是在END語句塊中完成,它也是一個可選語句塊

                      文本處理工具之awk 

五、變量:內置和自定義變量

1、內置變量
     FS:輸入字段分隔符,默認為空白字符
     OFS:輸出字段分隔符,默認為空白字符
     RS:輸入記錄分隔符,指定輸入時的換行符,原換行符仍有效
     ORS:輸出記錄分隔符,輸出時用指定符號代替換行符
     NF:字段數量
     NR:行號

   FNR:各文件分別計數,行號
     FILENAME:當前文件名
     ARGC:命令行參數的個數
     ARGV:數組,保存的是命令行所給定的各參數

2、自定義變量

    (1) -v var=value
    (2) 在program中直接定義

   示例:

          文本處理工具之awk

六、awk的輸出命令

   1、print

     用法:print item1,item2 …

      (1) 逗號分隔符

      (2) 輸出的各item可以字符串,也可以是數值;當前記錄的字段、變量或awk的表達式

      (3) 如省略item,相當于print $0 ,用于輸出整行

      (4) 打印字符串時,要用引號引用

      5)打印變量時候,可以使用變量名直接引用

    示例:

            文本處理工具之awk

2、printf格式化輸出

   格式化輸出: printf “ FORMAT” , item1, item2, …
       (1) 必須指定FORMAT
       (2) 不會自動換行,需要顯式給出換行控制符, \n
       (3) FORMAT中需要分別為后面每個item指定格式符
        4)格式符:與item一一對應
           %c: 顯示字符的ASCII碼
           %d, %i: 顯示十進制整數
           %e, %E:顯示科學計數法數值
           %f:顯示為浮點數
           %g, %G:以科學計數法或浮點形式顯示數值
           %s:顯示字符串
           %u:無符號整數
           %%: 顯示%自身
        5)修飾符:
          #[.#]:第一個數字控制顯示的寬度;第二個#表示小數點后精度

      -: 左對齊(默認右對齊)         

      +:顯示數值的正負符號

    示例:

       文本處理工具之awk

七、操作符

1、算術操作符:
       x+y, x-y, x*y, x/y, x^y, x%y
       -x: 轉換為負數
       +x: 轉換為數值
  2、字符串操作符:沒有符號的操作符,字符串連接
  3、 賦值操作符:
        =, +=, -=, *=, /=, %=, ^=,++, —
  4、比較操作符:==, !=, >, >=, <, <=
  5、模式匹配符: ~:左邊是否和右邊匹配包含 !~:是否不匹配

6、邏輯操作符: &&,或||,非!
  7、函數調用: function_name(argu1, argu2, …)
  8、條件表達式(三目表達式):
       selector?if-true-expression:if-false-expression

  示例:

  文本處理工具之awk

  
八、控制語句 

1、if-else語句           

   語法: if(condition){statement;…}[else statement]
      if(condition1){statement1}els
eif(condition2){statment2}else{statement3}

   示例:

  文本處理工具之awk

      

2、while 語句

       語法: while(condition){statement;…}
    條件“真”,進入循環;條件“假”, 退出循環

    示例:

           文本處理工具之awk

3、for 語句

   語法: for(expr1;expr2;expr3) {statement;…}
     常見用法:
           for(variable assignment;condition;iteration process){for-body}
     特殊用法:能夠遍歷數組中的元素;
           for(var in array) {for-body}

  示例:統計當前系統上所有tcp連接的各種狀態的個數

     文本處理工具之awk

4、do-while循環
     語法: do {statement;…}while(condition)
     意義:無論真假,至少執行一次循環體

示例:計算1到100的和

文本處理工具之awk

5、switch語句
     語法: switch(expression) {case VALUE1 or /REGEXP/:statement1; case VALUE2 or /REGEXP2/: statement2;…; default: statementn}  

6、break和continue

示例:

文本處理工具之awk

7、next
       提前結束對本行處理而直接進入下一行處理

示例:利用next打印奇數行

文本處理工具之awk

九、數組

關聯數組: array[index-expression]
  (1)可使用任意字符串;字符串要使用雙引號括起來
  (2)如果某數組元素事先不存在,在引用時, awk會自動創建此元素,并將其值初始化為“空串”

(3)若要判斷數組中是否存在某元素,要使用“index in array”格式進行遍歷

         若要遍歷數組中的每個元素,要使用for循環
        for(var in array) {for-body}
   注意: var會遍歷array的每個索引

  示例:統計訪問httpd服務的每個客戶的次數

   文本處理工具之awk

十、函數

1、內建函數

  rand():返回0和1之間一個隨機數
    length([s]):返回指定字符串的長度
    sub(r,s,[t]):對t字符串進行搜索r表示的模式匹配的內容,并將第一個匹配的內容替換為s
    gsub(r,s,[t]):對t字符串進行搜索r表示的模式匹配的內容,并全部替換為s所表示的內容

  split(s,array,[r]):以r為分隔符, 切割字符串s,并將切割后的結果保存至array所表示的數組中,第一個索引值為1,第二個索引值為2,…
   2、自定義函數
    格式:
       function name ( parameter, parameter, … ) {statemente return expression} 

十一、awk中調用shell命令

      system命令
    空格是awk中的字符串連接符,如果system中需要使用awk中的變量可以使用空格分隔,或者說除了awk的變量外其他一律用””引用起來。

十二、幾個awk練習

        1、利用awk打印九九乘法表

          文本處理工具之awk

       2、提取字符串“hy3yg4gyh6jh@$$6jhj7mkkjn+24hij” 中的數字

         文本處理工具之awk

      

原創文章,作者:zq,如若轉載,請注明出處:http://www.www58058.com/76592

(0)
zqzq
上一篇 2017-05-21 21:01
下一篇 2017-05-21 21:03

相關推薦

  • Linux第一周學習博客作業

    對第一周學習的內容進行總結

    Linux干貨 2017-12-02
  • N24_星空學習宣言

    學習是一種投資,既然投資了就不能虧損,努力學習,做一個學習界的巴菲特!

    Linux干貨 2016-10-24
  • 馬哥教育網絡班22期+第六周課程練習

    1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; ]# cp -v  /etc/rc.d/rc.sysinit /tmp/    `/etc/rc.d/rc.sysinit' -> `/tmp/rc.sysinit&…

    Linux干貨 2016-10-17
  • phpMyAdmin安裝部署

    phpMyAdmin安裝部署 phpMyAdmin 是一個用PHP編寫的軟件工具,可以通過web方式控制和操作MySQL數據庫。通過phpMyAdmin 可以完全對數據庫進行操作,例如建立、復制和刪除數據等等。如果使用合適的工具,MySQL數據庫的管理就會變得相當簡單。應用 MySQL 命令行方式需要對 MySQL 知識非常熟悉,對SQL語言也是同樣的道理?!?/p>

    2017-06-13
  • Basic認證

    basic認證: (1) 定義安全域 [root@bluee htdocs]# mkdir admin [root@bluee htdocs]# vim admin/index.html 刷新瀏覽器,可以看到admin/index.html文件內容“Page FOR Adminstration” 編輯配置文件: 找個位置增加一個Directoty: <…

    Linux干貨 2016-08-05
  • 關于find命令的實際應用

    1、查找/var目錄下屬主為root,且屬組為mail的所有文件 2、查找/var目錄下不屬于root、lp、gdm的所有文件 3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件 4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件 5、查找/etc目錄下大于1M且類型為普通文件的所有文件 6、查找/e…

    Linux干貨 2016-08-16
欧美性久久久久