awk中的陣列
awk中的陣列跟php中的很像,使用前都不需要宣告,都可以用字串做下標。
我們建立乙個reg.dat檔案來記錄使用者選修的課程:
mary o.s. arch. discrete steve d.s. algorithm arch.wang discrete graphics o.s. lisa graphics a.i.
lily discrete algorithm
現在要統計各課程被選的次數,親,怎麼辦?
之前的程式都是用命令列完成的,從這一篇開始,我們學習將程式寫在檔案中來呼叫。
呼叫的方式是:
awk -f awk程式檔案 資料檔案下面建立乙個course.awk檔案,在裡面編寫如下的程式:
end
然後在命令列中呼叫:
awk -f course.awk reg.dat輸出結果:
discrete 3d.s. 1
o.s. 2
steve 1
a.i. 1
lisa 1
graphics 2
arch. 2
algorithm 2
解釋一下course.awk中的程式:
第一行是乙個for迴圈,nf是一行的字段數,number是乙個陣列,$i從第2列開始,直到一行最後一列,其實就是迴圈了一行的所有的課程,我們將課程名作為陣列的下標,一旦有重複的課程,就會將number[$i]加1。
第二行中的end表示的是在檔案處理結束後進行的處理。這一行也有乙個for迴圈,它是用於將number陣列格式化輸出,for(course in number)會逐個讀取number中的元素,讀取的下標即course,值為number[course]。printf完成下標與值的格式化輸出。
其實在之前的awk學習筆記(6)中介結不排序對資料去重的技巧時已經用到過陣列了,只是沒有系統的學習。
awk學習筆記
單詞計數 cat filename awk end 排序演算法 bin bash function f while n 1 do f 1 shift done wait 顯示特殊符 var i am a student echo var awk 結果為 am a i student echo var...
awk學習筆記
1 將第一列重複的元素去掉,只保留第乙個 root centos awk test cat sed u.txt haha 1 nihao 1 haha 3 hehe 4 heihei 5 heihei 6 1 haha 1 heihei root centos awk test awk f a 1 ...
AWK學習筆記
1.awk是三個 人名的縮寫,他們是 aho peter weinberg和 brain kernighan。awk是一種樣式掃瞄與處理工具。但其功能卻大大強於sed和grep。awk支援對記錄和字段的處理,其中對字段的處理是grep和sed不能實現 的,這也是awk優於二者的原因之一。2.與其它u...