perl語言中的AWK之基礎篇

來源:互聯網
上載者:User

perl 語言中的AWK之基礎篇一:AWK與perl
 
  1. 1. Perl,我們並不陌生了到目前為止,它在web編程中的強大作用,對於每個web開發人員而言,重要性不言而喻,
  2. 由於perl借取了C、sed、awk、shell scripting以及很多其他程式語言的特性。
  3. 其中最重要的特性是它內部整合了Regex的功能,以及巨大的第三方程式碼程式庫CPAN。
  4. 簡而言之,Perl 象C一樣強大,象awk、sed等指令碼描述語言一樣方便,由此看來在perl語言中,AWK佔據著重要的一席之地。
  5. 這裡我們不去重點的說perl語句而是介紹一下其重要的組成部分AWK的基礎內容,
  6. 下面我們就來揭開perl中的awk的神秘面紗吧! 
二:AWK簡介
 
  1. what is awk? 對於初學者來說這是個模式的代名詞,其實awk是三位創造者Aho、Weinberger和Kernighan統稱,
  2. 簡單的來說AWK 是一種用於處理文本的程式設計語言工具  
  3. wk可以做些什嗎?由於其可以進行樣式裝入、流量控制、數學運算子、進程式控制制語句甚至於內建的變數和函數。
  4. 它具備了一個完整的語言所應具有的幾乎所有精美特性,所以其三位建立者已將它正式定義為“樣式掃描和處理語言”。
  5. 它允許您建立簡短的程式,這些程式讀取輸入檔案、為資料排序、處理資料、對輸入執行計算以及產生報表,還有無數其他的功能。  
三:AWK處理文本的流程:
 
  1. awk在處理檔案時,首先掃描檔案中的每一行,尋找與命令列中所給定內容相匹配的模式。
  2. 如果發現匹配內容,則進行下一個編程步驟。如果找不到匹配內容,則繼續處理下一行 
四:AWK的使用
 
  1. AWK的 文法格式:  
  2. Awk [options] ‘scritpts’  filename  
  3.  或者awk [options] ‘partern [actions] ’ filename  
  4. [options]:  
  5. -F: 指定awk 處理文本的行時的分隔字元
 例如 

650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/1300491920-0.png" alt="" />

 
  1. 常用的awk內建的三個變數 OFS  FS  NF   
  2. -FS 指定欄位分隔符號
  3. 例如  
 
  1. Awk  -v FS=: ‘{print $2}’ /etc/passwd  

650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/13004ac6-1.png" alt="" />

650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/13004941D-2.png" alt="" />

 
  1. -v OFS= 定義awk 輸出時的字元分隔字元 
  2. 例如: Awk –v OFS=# ‘{print $1,$2}’ /etc/passwd

650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/1300493O9-3.png" alt="" />

 
  1. 注:上例中的在輸入$1和$2,$1,$2的形式是分別輸出$1和$2. $1 $2的形式是將$1和$2合并後輸出  
  2. 如  

650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/13004943K-4.png" alt="" />

 
  1.  NF 表示awk處理一行時的欄位總數  
  2.  例如:輸出一行的最後一個欄位  
  3. Awk ‘{print $NF}’ /etc/passwd 

650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/1300494A3-5.png" alt="" />

 
  1. 註:顯示一行的倒數第三個欄位   

650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/13004aG0-6.png" alt="" />

 
  1. printf 的使用  
  2. 格式:printf format item1,item2,……  
  3.  注意:  
  4. 1:與print命令的最大不同是,printf 需要指定format  
  5. 2:format用於指定後面的每個item的輸出格式  
  6. 3:printf語句不會自動列印分行符號 \n  
  7. 4:format格式的指示符都以%開頭,後跟一個字元  
  8. format:  
  9. %c :顯示字元的ASCII碼  
  10. %d,%i :顯示字元的十進位整數  
  11. %e,$E 科學計數法顯示數值  
  12. %f :顯示浮點數  
  13. %g ,%G :以科學計數法的格式或者浮點數的格式顯示數值  
  14. %s  顯示字串  
  15. %u  顯示不帶正負號的整數  
  16. %% 顯示%自身  
  17. 另外format 還可以添加修飾符  
  18. N:顯示寬度  
  19. -:靠左對齊  
  20. +:顯示數值符號  
  21. 例如: 

650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/1300491A0-7.png" alt="" />

 
  1. Awk 中使用 輸出重新導向  
  2. print items > output-file  
  3. print items >> output-file  
  4. print items | command   
awk的操作符: 
 
  1. 算術操作符:  
  2. -x: 負值  
  3. +x: 轉換為數值;  
  4. x^y:   
  5. x**y: 次方  
  6. x*y: 乘法  
  7. x/y:除法  
  8. x+y:  
  9. x-y:  
  10. x%y:  
  11. 字串操作符:  
  12. 只有一個,而且不用寫出來,用於實現字串串連;  
  13. 賦值操作符:  
  14. =  
  15. +=  
  16. -=  
  17. *=  
  18. /=  
  19. %=  
  20. ^=  
  21. **=  
  22. ++  
  23. --  
  24. 需要注意的是,如果某模式為=號,此時使用/=/可能會有語法錯誤,應以/[=]/替代;  
  25. 布爾值 
  26. awk中,任何非0值或非Null 字元串都為真,反之就為假  
 
  1.  比較操作符:  
  2. x < y       True if x is less than y.   
  3. x <= y  True if x is less than or equal to y.   
  4. x > y       True if x is greater than y.   
  5. x >= y  True if x is greater than or equal to y.   
  6. x == y  True if x is equal to y.   
  7. x != y  True if x is not equal to y.   
  8. x ~ y      True if the string x matches the regexp denoted by y.   
  9. x !~ y  True if the string x does not match the regexp denoted by y.   
  10. subscript in array    True if the array array has an element with the subscript subscript  
  11.  運算式間的邏輯關係符:  
  12.  &&  
  13. || 
  14. 條件運算式:  
  15. selector?if-true-exp:if-false-exp  
  16.  selector :條件運算式  
  17.  if-true-exp:statement  
  18.  if-false-exp: statement  
  • 下面我們來重點說說awk的模式使用
 
  1. awk的模式:  
  2. awk [options] ‘parten’ ‘print ….’ filename  
  3. parten:  
  4. 1:Regex 格式為/regular expression/  
  5. 2: 運算式  其值非0或者非Null 字元時滿足的條件  例如:$1 ~ /user/ 或者 $1 == ‘user’  
  6. 用運算子~(匹配)和 ~ !(不匹配)  
  7. 例如: 
650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/1300493Y6-8.png" alt="" />

650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/13004911N-9.png" alt="" />

650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/130049D27-10.png" alt="" />

650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/13004951M-11.png" alt="" />

 
  1. 指匹配範圍格式為pat1,pat2 pat代表模式)同sed用法  
  2.  BEGIN/END 特殊格式   
  3.    BEGIN :在awk執行動作之前的處理動作  
  4.     讓使用者指定在第一條輸入記錄被處理之前所發生的動作,通常可在這裡設定全域變數  
  5.  END:在awk 執行動作完成後執行的動作  
  6.     讓使用者在最後一條輸入記錄被讀取之後發生的動作  
  7. 例如: 
  8. Awk –F:’$NF ~/bash/ {print “username bash” ;printf “%-10s %s\n,$1,$NF”}’ /etc /passwd

650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/13004ab2-12.png" alt="" />

650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/1300494F0-13.png" alt="" />

650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/1300493228-14.png" alt="" />

650) this.width=650;" border="0" src="http://www.bkjia.com/uploads/allimg/131228/1300491621-15.png" alt="" />

 空模式是指 :匹配所有行由於篇幅限制字數限制不能全部介紹,如有錯誤,還望多多指正,多多討論,謝謝。下篇將繼續awk的迴圈控制語句的使用,

本文出自 “好望角” 部落格,請務必保留此出處http://haicang.blog.51cto.com/2590303/949060

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.