awk 常用函數的事~

awk一些函數+簡單示例,沒有概念,實踐中記憶:

  1. 1.split //split(域名,數組,分隔符)  

  2. [root@localhost ~]# cat a  

  3. abc abd abe abf abg  

  4. [root@localhost ~]# awk '{split($0,a," "); print length(a);for(i in a) print a[i]}' a //$0按空格作爲分隔符,順序存入數組a中  

  5. 5  

  6. abf  

  7. abg  

  8. abc  

  9. abd  

  10. abe  

  11. 2.sub //替換函數,sub(舊字符串,新字符串,作用域)  

  12. [root@localhost ~]# echo abc abc abc abc | awk '{sub("c","k",$4); print }'  //把第4個作用域的c替換爲k  

  13. abc abc abc abk  

  14. [root@localhost ~]# echo abc abc abc abc | awk '{sub("c","k"); print }'     //沒寫作用域,默認匹配第一次   

  15. abk abc abc abc  

  16. 3.gsub //相比sub,多了global參數  

  17. [root@localhost ~]# echo abc abc abc abc | awk '{gsub("c","k"); print }'

  18. abk abk abk abk  

  19. [root@localhost ~]# echo abc abc abc abc | awk '{gsub("c","k",$4); print }'

  20. abc abc abc abk  

  21.  

  22.  

  23. 4.index //index(作用域,字符串)  

  24. [root@localhost ~]# echo abc ack | awk '{if(index($1,"k")) print "yes";else print "no"; }'

  25. no

  26. [root@localhost ~]# echo abc ack | awk '{if(index($2,"k")) print "yes";else print "no"; }'

  27. yes  

  28. [root@localhost ~]# echo abc ack | awk '{print index($2,"k")}' //查到匹配字符串位置  

  29. 3  

  1. 5.length(s) //打印字符串長度  

  2. [root@localhost ~]# echo abcdefg hijkl | awk '{ print length($0) }'

  3. 13  

  4.  

  5. 6.match //match(作用域,字符串) 跟index類似  

  6. [root@localhost ~]# echo abc abk | awk '{ print match($2,"k") }'

  7. 3  

  8. [root@localhost ~]# echo abc abk | awk '{ print match($1,"k") }'

  9. 0  

  10.  

  11. 7.substr //截取字符串,substr(作用域,開始位置,結束位置)  

  12. [root@localhost ~]# echo abc abchelloworld | awk '{b=substr($2,4); print b}'   //沒有結束位置,默認到結尾  

  13. helloworld  

  14. [root@localhost ~]# echo abc abchelloworld | awk '{b=substr($2,4,5); print b}' //第4個字符開始取出5個字符

  15. hello  

  16. 6.tolower(s)  //字符串轉換爲小寫  

  17. [root@localhost ~]# echo ABC ABC ABC | awk '{print tolower($0)}'

  18. abc abc abc  

  19. [root@localhost ~]# echo ABC ABC ABC | awk '{b=tolower($2); print b}'

  20. abc  

  21. 7.toupper(s)  //字符串轉換爲大寫  

  22. [root@localhost ~]# echo abc abc abc | awk '{print toupper($0)}'

  23. ABC ABC ABC  

  24. [root@localhost ~]# echo abc abc abc | awk '{b=toupper($2); print b}'

  25. ABC  

  26. 8.system()   //執行系統命令  

  27. [root@localhost ~]# awk 'BEGIN{ print system("ls -a") }'

  28. .        .bash_logout   .dmrc       .gnome         .ICEauthority       .mysql_history  .Trash  

  29. ..       .bash_profile  .eggcups    .gnome2        install.log     .nautilus       .viminfo  

  30. a        .bashrc    .evolution  .gnome2_private    install.log.syslog  .redhat     .Xauthority  

  31. anaconda-ks.cfg  .cshrc     .gconf      .gstreamer-0.10    .metacity       .tcshrc  

  32. .bash_history    Desktop    .gconfd     .gtkrc-1.2-gnome2  .mozilla        .thumbnails  

  33. 0  

  34. 9.gensub()  //gensub(舊字符串,新字符串,替換位置,作用域)  

  35. [root@localhost ~]# echo abaa adaa aaaa | awk '{b=gensub("a","k",3,$3); print b}'

  36. aaka  

  37. [root@localhost ~]# echo abaa adaa aaaa | awk '{b=gensub("a","k",4,$3); print b}'

  38. aaak  

  39.  

  40. 10.strftime()  //時間函數  

  41. [root@localhost ~]# awk 'BEGIN{ now=strftime("%y-%m-%d %H-%M-%S"); print now}'

  42. 13-01-12 21-14-30  

  43.  

  44. getline   //獲取下一行,以下幾種常用用法  

  45. [root@localhost ~]# echo -e "abc\nabd\nabe" > a 

  46. [root@localhost ~]# awk 'BEGIN{ getline < "a"; print }'

  47. abc  

  48. [root@localhost ~]# awk '/abc/{ getline tmp; print tmp; print }' a  //當前行和下一行對調

  49. abd  

  50. abc  

  51. [root@localhost ~]# awk 'BEGIN { getline < "-"; print }'  //打印鍵盤輸入的內容

  52. hello  

  53. hello  

  54. [root@localhost ~]# awk '{ getline line < "a"; print line }' a   //打印出文件內容

  55. abc  

  56. abd  

  57. abe  

  58. [root@localhost ~]# seq 10 | awk '{getline; print}'  //注與BEGIN的區別,此處awk指針有跳轉  

  59. 2  

  60. 4  

  61. 6  

  62. 8  

  63. 10  

  64. [root@localhost ~]# seq 10 | awk 'BEGIN{while(getline)print}' //此處awk指針沒有跳轉  

  65. 1  

  66. 2  

  67. 3  

  68. 4  

  69. 5  

  70. 6  

  71. 7  

  72. 8  

  73. 9  

  74. 10  

  75.  

  76. next  //結束當前行,讀取下一行,並從從頭執行命令  

  77. [root@localhost ~]# cat a  

  78. abc  

  79. abd  

  80. abe  

  81. [root@localhost ~]# awk '/abc/{print "yes"; next;}{ print "no"}' a  

  82. yes  

  83. no

  84. no

  85.  

  86.  

  87. exit //退出執行  

  88. [root@localhost ~]# echo -e "a\na\na\na\na\na\nb\na\na" | awk '/b/{exit;}{print "yes"}'

  89. yes  

  90. yes  

  91. yes  

  92. yes  

  93. yes  

  94. yes  

 

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