perl語言中的AWK之基礎篇
一:AWK與perl
- 1.?Perl,我們并不陌生了到目前為止,它在web編程中的強大作用,對于每個web開發者而言,重要性不言而喻,
- 由于perl借取了C、sed、awk、shell?scripting以及很多其他程序語言的特性。
- 其中最重要的特性是它內部集成了正則表達式的功能,以及巨大的第三方代碼庫CPAN。
- 簡而言之,Perl?象C一樣強大,象awk、sed等腳本描述語言一樣方便,由此看來在perl語言中,AWK占據著重要的一席之地。
- 這里我們不去重點的說perl語句而是介紹一下其重要的組成部分AWK的基礎內容,
- 下面我們就來揭開perl中的awk的神秘面紗吧!?
二:AWK簡介
- what?is?awk??對于初學者來說這是個模式的代名詞,其實awk是三位創造者Aho、Weinberger和Kernighan統稱,
- 簡單的來說AWK?是一種用于處理文本的編程語言工具??
- wk可以做些什么?由于其可以進行樣式裝入、流控制、數學運算符、進程控制語句甚至于內置的變量和函數。
- 它具備了一個完整的語言所應具有的幾乎所有精美特性,所以其三位創建者已將它正式定義為“樣式掃描和處理語言”。
- 它允許您創建簡短的程序,這些程序讀取輸入文件、為數據排序、處理數據、對輸入執行計算以及生成報表,還有無數其他的功能。??
三:AWK處理文本的流程:
- awk在處理文件時,首先掃描文件中的每一行,查找與命令行中所給定內容相匹配的模式。
- 如果發現匹配內容,則進行下一個編程步驟。如果找不到匹配內容,則繼續處理下一行?
四:AWK的使用
- AWK的?語法格式:??
- Awk?[options]?‘scritpts’??filename??
- ?或者awk?[options]?‘partern?[actions]?’?filename??
- [options]:??
- -F:?指定awk?處理文本的行時的分隔符
例如?
- 常用的awk內置的三個變量?OFS??FS??NF???
- -FS?指定字段分隔符
- 例如 ?
- Awk??-v?FS=:?‘{print?$2}’?/etc/passwd??
perl語言是干嘛的、
- -v?OFS=?定義awk?輸出時的字符分隔符?
- 例如:?Awk?–v?OFS=#?‘{print?$1,$2}’?/etc/passwd
- 注:上例中的在輸入$1和$2,$1,$2的形式是分別輸出$1和$2.?$1?$2的形式是將$1和$2合并后輸出??
- 如??
perl語言length,
- ?NF?表示awk處理一行時的字段總數??
- ?例如:輸出一行的最后一個字段??
- Awk?‘{print?$NF}’?/etc/passwd?
- 注:顯示一行的倒數第三個字段???
- printf?的使用??
- 格式:printf?format?item1,item2,……??
- ?注意:??
- 1:與print命令的最大不同是,printf?需要指定format??
- 2:format用于指定后面的每個item的輸出格式??
- 3:printf語句不會自動打印換行符?\n??
- 4:format格式的指示符都以%開頭,后跟一個字符??
- format:??
- %c?:顯示字符的ASCII碼??
- %d,%i?:顯示字符的十進制整數??
- %e,$E?科學計數法顯示數值??
- %f?:顯示浮點數??
- %g?,%G?:以科學計數法的格式或者浮點數的格式顯示數值??
- %s??顯示字符串??
- %u??顯示無符號整數??
- %%?顯示%自身??
- 另外format?還可以添加修飾符??
- N:顯示寬度??
- -:左對齊??
- +:顯示數值符號??
- 例如:?
perl中不包含?
- Awk?中使用?輸出重定向??
- print?items?>?output-file??
- print?items?>>?output-file??
- print?items?|?command???
awk的操作符:?
- 算術操作符:??
- -x:?負值??
- +x:?轉換為數值;??
- x^y:???
- x**y:?次方??
- x*y:?乘法??
- x/y:除法??
- x+y:??
- x-y:??
- x%y:??
- 字符串操作符:??
- 只有一個,而且不用寫出來,用于實現字符串連接;??
- 賦值操作符:??
- =??
- +=??
- -=??
- *=??
- /=??
- %=??
- ^=??
- **=??
- ++??
- --??
- 需要注意的是,如果某模式為=號,此時使用/=/可能會有語法錯誤,應以/[=]/替代;??
- 布爾值?
- awk中,任何非0值或非空字符串都為真,反之就為假??
- ?比較操作符:??
- x?<?y???????True?if?x?is?less?than?y.???
- x?<=?y??True?if?x?is?less?than?or?equal?to?y.???
- x?>?y???????True?if?x?is?greater?than?y.???
- x?>=?y??True?if?x?is?greater?than?or?equal?to?y.???
- x?==?y??True?if?x?is?equal?to?y.???
- x?!=?y??True?if?x?is?not?equal?to?y.???
- x?~?y??????True?if?the?string?x?matches?the?regexp?denoted?by?y.???
- x?!~?y??True?if?the?string?x?does?not?match?the?regexp?denoted?by?y.???
- subscript?in?array????True?if?the?array?array?has?an?element?with?the?subscript?subscript??
- ?表達式間的邏輯關系符:??
- ?&&??
- ||?
- 條件表達式:??
- selector?if-true-exp:if-false-exp??
- ?selector?:條件表達式??
- ?if-true-exp:statement??
- ?if-false-exp:?statement??
- 下面我們來重點說說awk的模式使用
- awk的模式:??
- awk?[options]?‘parten’?‘print?….’?filename??
- parten:??
- 1:正則表達式?格式為/regular?expression/??
- 2:?表達式??其值非0或者非空字符時滿足的條件??例如:$1?~?/user/?或者?$1?==?‘user’??
- 用運算符~(匹配)和?~?!(不匹配)??
- 例如:?
perl在文件中加入幾行、
- 指匹配范圍格式為pat1,pat2?(pat代表模式)同sed用法??
- ?BEGIN/END?特殊格式???
- ???BEGIN?:在awk執行動作之前的處理動作??
- ????讓用戶指定在第一條輸入記錄被處理之前所發生的動作,通常可在這里設置全局變量??
- ?END:在awk?執行動作完成后執行的動作??
- ????讓用戶在最后一條輸入記錄被讀取之后發生的動作??
- 例如:?
- Awk?–F:’$NF?~/bash/?{print?“username?bash”?;printf?“%-10s?%s\n,$1,$NF”}’?/etc?/passwd
perl腳本語法、
空模式是指 :匹配所有行
由于篇幅限制字數限制不能全部介紹,如有錯誤,還望多多指正,多多討論,謝謝。下篇將繼續awk的循環控制語句的使用,