在linux/unix 的命令列上輸入一下格式的指令: ( 「$」表shell命令列上 的提示符號)
$awk 『awk程式』 資料檔名
上面這條語句中,awk會先編譯該程式, 然後執行該程式來處理所指定的資料檔案。
awk程式的主要結構: awk程式中主要語法是 pattern ,即模式, 所以常見的awk 程式的機構如下:
pattern1
pattern2
……pattern3
pattern 是什麼? awk 可接受許多不同型態的pattern。 一般常使用 「關係表示式」(relational expression) 來當成 pattern。 例如: x > 34 是乙個pattern, 判斷變x與34是否存在大於的關係。 x == y是乙個pattern, 判斷變數x與變數y是否存在等於的關係。 上式中 x>34 ,x ==y 便是典型的pattern。 awk 提供c 語言中常見的關係運算子(relational operators) 如 >, <, >=, <=, ==, != 。此外, awk 還提供~ (匹配match) 及 !~(非匹配not match) 二個關係運算子。 其用法與涵義如下:
如果a 為一字串, b 為一正規表示式(regular expression) ,a ~ b 判斷字串a 中是否包含能匹配(match)b表示式的子字串。 a !~ b 判斷字串a 中是否不包含能匹配(match)b表示式的子字串。 例如:」banana」 ~ /an/ 整個是乙個pattern。 因為」banana」中含有可以匹配/an/的子字串,所以此關係式成立 (true),整個pattern的值為true。
有少數awk文章, 把~, !~ 當成另一類的操作符(operator),而不作為一種 relational operator。在這裡將這兩個運算子當成一種relational operator。
actions 是什麼?
actions 是由許多awk指令構成。awk 的指令與c 語言中的指令十分類似。 例如:awk 的i/o指令: print, printf( ), getline……
awk的流程控制指令:
if(…) else, while(…)…
awk 如何處理模式和動作的呢?(pattern ? ),awk 會先判斷(evaluate)pattern的值, 如果pattern的值為true (或不為0的數字,或不是空的字串),則awk將執行該pattern所對應的actions。否則,如果pattern之值不為true, 則awk 將不執行該pattern所對應的actions。
例如:如果awk程式中有下列兩指令 50 > 23 「banana」 ~ /123/
awk會先判斷50 >23 是否成立,因為該式成立,所以awk將列印出」hello! the word!!」。 而另一pattern 為」banana」 ~/123/, 因為」banana」 內未含有任何子字串可匹配(match)/123/,所以pattern 的值是false,awk將不會列印出 「good morning !」
awk 如何處理 的語法是什麼呢?
有時語法pattern 中,pattern 部分會省略,只剩下 。這種情況表示」無條件執行這個actions」。
awk 的字段變數
awk 所內建的字段變數及其涵意如下:
字段變數 含義
$0 一字串, 其內容為目前awk 所讀入的資料行。
$1 $0 上第乙個欄位的資料。
$2 $0 上第二個欄位的資料
其餘類推 。
讀入資料行時,awk如何更新(update)這些內建的字段變數?
當awk 從資料檔案中讀取乙個資料行時,awk 會使用內建變數$0 進行記錄。當$0 被改動時(例如:讀入新的資料行或改變$0的值…), awk 會立刻重新分析$0的字段情況,並將$0上各字段的資料用$1,$2…進行記錄。
awk 的內建變數(built-in variables)
awk 提供了許多內建變數,使用者可以在程式中使用這些變數來取得相關資訊。常見的內建變數有:
內建變數 含義
nf number of fields 為一整數,其值表示$0上所存在的字段數目。
nr number of records為一整數,其值表示awk 已讀入的資料行數目。
filename awk正在處理的資料檔案檔名。
例如:awk 從資料檔案emp.dat 中讀入第一筆資料行「a101 chenying 100 210」之後,程式中:$0 的值就是「a101 chenying 100 210」,$1的值是 「a101″,$2 的值是 「chenying」,$3的值是100,$4的值是210,$nf的值是4,$nr 的值是1,$filename 的值是」emp.dat」。
awk 的工作流程:執行awk 時,它會反覆進行下列四步驟:
1、自動從指定的資料檔案中讀取乙個資料行。
2、自動更新(update)相關的內建變數之值。 如:nf,nr,$0…
3、依次執行程式中所有的pattern 指令。
4、當執行完程式中所有pattern 時,如果資料檔案中還有未讀取的資料,則反覆執行步驟1到步驟4。awk會自動重複進行上述4個步驟,使用者不須於程式中編寫這個迴圈(loop)。
列印檔案中指定的字段資料並加以計算
awk 處理資料時,它會自動從資料檔案中一次讀取一行記錄,並將該資料切分成乙個個的字段;程式中可使用$1,$2,…直接取得各個欄位的內容。這個特色讓使用者輕易地使用awk 編寫reformatter 來改變資料格式。
例子:以檔案emp.dat 為例,計算每人應發工資並列印報表。
分析:awk 會自行一次讀入一行資料,所以程式中僅需告訴awk 如何處理所讀入的資料行。執行如下命令:
$ awk 『』 emp.dat
執行結果時,螢幕出現 :
chenying 21000
linxiyu 23650
…………….
linux/unix命令列上,執行awk 的語法為:$awk 』awk程式』 欲處理的資料檔案檔名;本例中程式部分是。 把程式置於命令行時,程式之前後須以』 括住。emp.dat 為指定給該程式處理的資料檔案檔名。本程式中使用:pattern 語法,但是pattern 部分被省略,表無任何限制條件,所以awk讀入每筆資料行後都將無條件執行這個actions。 print為awk所提供的輸出指令,會將資料輸出到標準輸出stdout(螢幕)。 print 的引數間彼此以」,」 (逗號) 隔開,列印出資料時彼此間會以空白隔開。
如果將上述的程式部分儲存於檔案pay1.awk 中,執行命令時再指定awk 程式檔案的檔名。 這是執行awk 的另一種方式,適用於程式較大的情況, 其語法如下:
$ awk -f awk程式檔名 資料檔案檔名
$ awk -f pay1.awk emp.dat
awk 中也提供與 c 語言中類似用法的printf()函式,使用該函式可進一步控制資料的輸出格式。編輯另乙個awk程式如下,並取名為pay2.awk
執行下列命令
$awk -f pay2.awk emp.dat
執行結果螢幕出現:
chenying workhours: 100 and pay: 21000
linxiyu workhours: 110 and pay: 23650
degnming workhours: 130 and pay: 27170
liuchao workhours: 125 and pay: 27500
hejing workhours: 95 and pay: 19950
Web API 第二部分
web api 第二部分 元素偏移量 offset element.offsettop element.offsetleft element.offsetwidth 可以得到元素的大小 寬度和高度 是包含padding border width element.offsetheight elemen...
redux 第二部分
redux 的使用方法,為什麼使用 action.js 檔案,進行優化 將其分開,然後我們通過工廠函式的每次返回不同的物件,由於引數是固定的,每次返回的都是事件型別和事件資料,所以我們可以使用乙個函式,通過其返回值來返回乙個物件,讓後傳遞給 action 我們的 reducer 函式有兩個引數,引數...
實驗二 第二部分
第二部分 ftp協議分析 1.兩個同學一組,a和b。2.在a主機上架設ftp伺服器 3.在b主機上執行wireshark,並登陸a主機的ftp伺服器,上傳一張,得到抓取的資料報,4.進行追蹤tcp流,顯示為原始資料,分析得到a主機登陸ftp的過程及使用者名稱密碼,還原上傳的,第二部分 ftp協議分析...