本章你要掌握的內容以下:linux
1 awk的介紹正則表達式
2 awk的基本用法算法
3 awk的變量編程
4 awk的格式化數組
5 awk的操做符編程語言
6 awk條件判斷ide
7 awk的循壞函數
8 awk的數組測試
9 awk的函數spa
10 調用系統命令
一 awk的介紹:
你們最先據說awk的應該是在文本三劍客當中,那就是grep、sed、awk。可是awk能夠說是裏面最厲害的了,有人說你的linux學的有多麼的好,在awk當中均可以知足你,由於awk它是一門編程語言,它主要用於對文本和數據的掃描與處理,能夠生成報告生成器,文本處理的格式化輸出。awk有不少種版本,如:awk、nawk、mawk、gawk、MKS awk、take.. 這其中有開源產品也有商業產品。
1.1 awk的工做原理:
awk 'BEGIN{commands} pattern {commands} END{commands}'
第一步:執行BEGIN{commands}語句塊中的語句;
第二步:從文件或標準輸入(stain)讀取一行,而後執行pattern{commands}語句塊,它逐行掃描,從第一行到最後一行重複這個過程,知道文件被徹底讀取。
第三步:當讀到輸入流末尾時,執行END{commands}語句塊。
解釋說明:
BEGIN語句塊在awk開始從輸入流中讀取以前被執行,這是一個可選的語句塊,好比變量初始化、打印輸出表格的表頭等語句一般能夠寫在BEGIN語句塊中。
pattern語句塊中的通用命令時最重要的部分,它也是可選的,若是沒有提供pattern語句塊,則是默認執行{print}。既打印每個讀取到的行,awk讀取的每一行都會被執行該語句塊。
END語句塊在awk從輸入流中讀取完全部的行以後就被執行,好比打印全部行的 分析結果這類信息彙總都是在END語句塊中完成,他也是一個可選的語句塊。
1.2 awk的基本結構:
awk 'BEGIN{print "start"} pattern{commands} END{print "end"}'file
一個awk一般有BEGIN語句塊、可以使用模式匹配的通用語句塊、END語句塊三部分組成,這三個部分是可選的。任意一個部分均可以不出如今腳本中。
1.3 awk的模式和操做:
awk腳本是由模式和操做組成的。那什麼是模式那,下面這些都是:
1 /正則表達式/:使用通配符的擴展集。
2 關係表達式:使用運算符進行操做,能夠是字符串或數字的比較測試。
3模式匹配表達式:用運算符~表示匹配和!~表示不匹配。
4 BEGIN語句塊、pattern語句塊、END語句塊:
操做由一個或多個命令、函數、表達式組成,有以下這些:
1 變量和數組賦值
2 輸出命令
3 內置函數
4控制流語句
1.4 awk命令格式和選項
語法形式:
經常使用命令選項:
1 -F fs fs指定輸入分隔符,fs能夠是字符串或正則表達式,如-F:
2 -v var=value 賦值一個用戶定義變量,將外部變量傳給awk
3 -f scripfile 從腳本文件中讀取awk命令
二 awk的基本用法
三 awk的變量:分爲內置和自定義變量。
內置的變量有下面這些:
FS:輸入字段分割符
OFS:輸出字段分隔符
RS:輸入記錄分隔符,指定輸入時的換行符,原來的行符仍有效
ORS:輸出記錄分隔符,輸出時用指定符號代替換行符
NF:字段數量
NR:行號
FNR:各文件分別計數,行號
FILENAME:命令行參數的個數
ARGC命令行參數的個數
ARGV:數組,保存的是命令行所給定的個參數
舉例說明:
1 在a.txt中用「;」作分隔符,打印出第1行和第3行。
2 ORS的使用方法
3 NF的使用方法,在etc/passwd中列出字段數量,
4 NR的使用方法
5 FNR的用法
6 ARGV的用法
自定義變量
舉例說明,注意這裏面加「,」和不加的輸出結果的區別
四 awk的格式化
print和printf的區別是什麼:print能自動換行,只顯示字符,printf不能自動換行,可是很是強大,能夠指定格式,是個內部命令。
格式符:
%c: 顯示字符的ASCII碼
%d,%i:顯示十進制整數
%e,%E:顯示科學計數法數值
%f:顯示爲浮點數
%g,%G:以科學計數法或浮點形式顯示數值
%s:顯示字符串
%u:無符號整數
%%:顯示%自身
修飾符:
#[.#]:第一個數字控制顯示的寬度;第二個#表示小數點後精度,#表示數字
-:左對齊(默認右對齊)
+:顯示數值的正負符號
舉例說明:
操做符分爲下面這些:
算數操做符
字符串操做符
賦值操做符
比較操做符
模式匹配符
邏輯操做符
一 算數操做符
二 字符串操做符:沒有符號的操做符,字符串連接。
若是你不理解能夠看一下這個例子就明白了。
三 賦值操做符
四 比較操做符
舉例說明請打印出奇偶數:
解釋說明:
由於"i=!i"中第一次i是空的,那非空就是真,因此輸出第一行。第二次本來就是真的,非真就是假的空的。就不會輸出顯示。第三次是空。右邊非空。因此是真的就會打印第三行,依次打印出奇數行。而在奇數前加一個非,就會顯示偶數行。
舉例說明:乘除算法
你們先把這些上面的弄清楚弄明白吧,我寫的比較多而且相對來講比較簡單了,加些來的一篇博客會寫下半部份內容,由於些博客是嚴謹的,不能隨隨便便寫寫就能夠了,下半部分涉及到函數,內容相對來講比較難,前面這些比較簡單,你們先看下,謝謝。
awk控制語句:if-else的用法
awk控制語句while的用法:
條件爲真,進入循壞,條件爲假,退出循壞。
計算1加到100和爲多少
awk控制語句for的用法: