天天看點

awk指令

1.awk介紹

linux文本處理三劍客:

           1.grep,egrep:文本過濾

           2.sed:行編輯器

           3.awk報表生成器,格式化文本輸出

linux中把awk連結到了gawk,使用的是gnu項目中的awk。

awk工作模式,讀取一行文本,利用内置或者指定的字段分隔符去分隔這行文本,把每字段指派給内置的位置變量,如第一段$1,第二段$2……整行可以指派$0然後引用。

awk是一種程式設計語言,用于在linux下對文本和資料進行處理。資料可以來自标準輸入、一個或多個檔案,或其它指令的輸出。它支援使用者自定義函數和動态正規表達式等先進功能,是linux下的一個強大程式設計工具。它在指令行中使用,但更多是作為腳本來使用。

2.awk基本文法和選項

gawk[options]’program’file file……    program:pattern(模式){action(處理動作)statement(輸出字段)},由語句組成,語句之間由分号分隔
-f[]:指定輸入字段的分隔符 -v var=val:變量指派
print item…. 注意: 1.item之間用逗号分隔,而輸出時使用輸出分隔符 2.輸出各item可以是字元串或者數值,也可以目前文本的字段($n),變量或者awk的表達式;數值會被隐式轉換成字元輸出。 3.print後面的item如果省略,輸出整行資訊
2.4.1.printf format item……      1.format是必須的      2.不會自動換行,需指定      3.format要給每個item指定一個格式符 2.4.2.格式符以%開頭,後面跟一個字元      %c:顯示字元的ascii碼      %d,%i:顯示十進制整數      %e,%e:科學計數法顯示數值      %f:顯示浮點數      %g,%g:以科學計數法格式或浮點數格式顯示數值      %s:字元串      %u:無字元的整數      %%:顯示%自身 2.4.3修飾符      #[.#]第一個數字顯示寬度如:%5s 第二個數字顯示精度如 :%5.4s      -:左對齊      +:顯示數值符号 2.4.4操作符      算數操作符        + – * / ^ %:加 減 乘 除 次方 取餘      字元串操作符:字元串連接配接      指派操作符:        =,+= ,–=     比較操作符:> >= < <= == !=     模式比對符:~ !~     邏輯操作符:&& ||     條件表達式:selector?if-true-expression:if-false-expression     函數調用:        functiong_name()
1)/regular expression/:僅處理能被/regular expression/比對到的行 2)relational expression:關系表達式 3)line  ranges:行範圍,類似sed或者vim的位址定界 4)begin/end:在運作awk運作程式之前運作一次begin;在運作awk完之後執行一次end 5)empty:空模式,比對任意行
1)表達式       a)if-else文法,通常對行或者行中的字段做條件判斷             if(條件)statement[else statement]             if(條件){statement;} [else {statement;}]花括号内能有多個語句,用分号分隔。        b)while循環,通常在目前行各字段間循環             while(條件)statement             while(條件){statement;}        c)do-while循環              do statement while (condition)        d)for循環              for(expr1:….) {statement;}        e)gawk有對switch語句的支援        f)break,continue             break退出目前循環             continue提前結束本輪循環,進入下輪循環        g)next提前結束對本行的處理,進入下行 3)複合表達式 4)輸入語句 5)輸出語句         

3.awk的變量

fs:字段分隔符,預設是空格 rs:記錄分隔符,預設為換行符 ofs:輸出字段分隔符,預設是空格 ors:輸出記錄分隔符,預設換行符 nf:目前記錄的字段數 nr:目前行數,所有檔案一起計數
fnr:每個檔案的行數 filename:目前檔案名 argc:指令行的參數個數 argv:指令行的數組,儲存awk和他的參數

3.2自定義變量

-v var=val   變量區分大小寫   1)可以在programe中定義   2)可以用-v 定義

          關聯數組:array[index-expression]

                   index-expression:

                           可以使用任意字元串;

                           如果某數組元素實作不存在,在引用時,awk會自動建立此元素并将其值初始化為空串:是以,若要判斷數組是否存在某元素,要使用“index in array”進行;

                   例如:a[mon]=“monday”

             for循環在awk中有一個專用于周遊數組元素

             文法:for(var in array){for-body}

             var會周遊array的每一個索引,print array[var]

          5.1内置函數

              rand():傳回0和1之間的随機數

              length([s]):字元串的長度

              gsub(r,s [,t])以r模式查找t代表的字元串,将其替換成s表示的字元串

              sub(r,s [,t])以r模式查找t代表的字元串,将其第一次比對替換成s表示的字元串

              split(s,a[,r]):以r為分隔符切割s字元串,結果儲存在a代表的數組中,split函數的傳回值是切割成的字段數。

                  substr(s,i[,n]):從s字元串取子串,從i開始,取n個字元

               systime:取時間戳;

               and(v1,v2)

          5.2自定義函數

               function f-name (p,q)

                {

                 }

繼續閱讀