awk

 http://www.zsythink.net/archives/tag/awk/   參考 自總結中 centos

awk:逐行處理,默認以"換行符"爲標記,識別每一行
awk基本語法:
awk[option]'Pattern{Action}'file
     選項    模式     動做


選項:awk -v FS='#'


模式:1 空模式 (空模式會匹配文本中的每一行)
     2 關係運算模式 (用到關係運算符:x<y;x!=y;x~/正則/)
     3 BEGIN/END模式 (BEGIN模式,表示開始處理文本以前執行的操做,END以後)
     4 正則模式 ( awk '/正則/{print $0}' /etc/passwd )
     5 行規範模式 ( awk '/正則/,/正則/{動做}' /etc/passwd )( awk 'NR>1 && NR<5 {print $0}' /etc/passwd )
          
     
動做:awk '{ print $0 }' test1.sh
     awk '{ print $1 }{ print $2 }' test1.sh 等同於 awk '{ print $1;print$2}' test1.sh
    

循環語句:
1/if 
     awk '{ if (條件){動做} }' file (若是'if'對應的大括號只有一條命令能夠省略動做的大括號)
     awk -F ":" '{ if(條件){動做} else{動做} }' file
     awk '{ if(條件){動做} else if(條件){動做} else{動做}}' file

2/for
     awk '{ for(初始化;布爾;更新){動做}}' file
     awk '{ for(變量 in 數組){動做}}' file

3/while     
     awk '{ while(條件){動做}}' file
      awk 'do{動做}while(條件)' file(do...while和while的區別是do...while不管是否知足條件都會先執行一遍)

跳出循環:
continue的做用:跳出當前循環
next的做用:讓awk直接從下一行開始運行;相似continue區別是continue針對'本次循環',而next針對'逐行處理'
break的做用:跳出整個循環
exit表示退出當前腳本;當有END模式時,會直接執行END動做再退出


分隔符形式 1:awk -F#
           2:awk -v FS='#'(-v 自定義函數)

數組:
     1 awk數組的第1個下標是1,能夠本身設置下標從0開始
     2 數組元素能夠爲"",即"空字符串"是存在的,todd[3]="";if(4 in todd){print "exist"}
                                               if(下標 in 數組名),判斷數組中是否存在對應元素

{count[$1]++}{for(i in count)} count是數組名,因爲引用的數組不存在,因此會建立下標爲改內容的元素,
且元素值在自加後爲1,當再次遇到該元素時,因爲下標同樣的元素存在且值爲1,故會在1的基礎上自加,這樣就能夠起到計數的功能。


內置函數:算數函數、字符串函數、時間函數、其餘函數等
算數函數:rand(隨機生成值不變0-1),srand(隨機生成值變化0-1),int( int(100*rand())生成1-100隨機整數 )
字符串函數:gsub(指定範圍內的全局替換),sub(指定範圍內的單次替換,只替換第一次匹配到的字符)
           length(可使用index函數指定字符位於整個字符串的位置),
           split函數( split(ts,huan,":"); 動態建立數組) 
           asort函數(根據元素的值進行排序,可是通過asort函數排序事後的數組的下標會被重置)
           asorti函數(根據下標進行排序,生成新數組)

           例:
[root@centos68 awk]# awk 'BEGIN{ t["z"]=66;t["q"]=88;t["a"]=3; \
> len=asorti(t,newt); \
> for(i=1;i<=len;i++){print i,newt[i],t[newt[i]]} }'
1 a 3
2 q 88
3 z 66


三元運算符:可代替"if...else語句"
           即 條件 ? 結果1 : 結果2
           


1、在awk中,若是省略了模式對應的動做,當前行知足模式時,默認動做爲打印整行,即{print $0}
2、在awk中,0或者空字符串表示"",非0值或者非空字符串表示""

據此能夠打印出奇偶行
奇:awk 'i=!i' file
偶: awk '!(i=!i)' file
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息