概述
AWK 可以使用關聯數組這種數據結構,索引可以是數字或字符串。
AWK關聯數 組也不需要提前聲明其大小,因為它在運行時可以自動的增大或減小。
數組使用的語法格式:array_name[index]=valuearray_name:數組的名稱index:數組索引value:數組中元素所賦予的值創建數組
接下來看一下如何創建數組以及如何訪問數組元素:
$ awk 'BEGIN {sites["runoob"]="www.runoob.com";sites["google"]="www.google.com"print sites["runoob"] " " sites["google"]}'
執行以上命令,輸出結果為:
www.runoob.comwww.google.com
在上面的例子中,定義了一個站點(sites)數組,該數組的索引為網站英文簡稱,值為網站訪問地址。可以使用如下格式訪問數組元素:
array_name[index] 刪除數組元素
我們可以使用 delete 語句來刪除數組元素,語法格式如下:
delete array_name[index
下面的例子中,數組中的 google 元素被刪除(刪除命令沒有輸出):
$ awk 'BEGIN {sites["runoob"]="www.runoob.com";sites["google"]="www.google.com"delete sites["google"];print fruits["google"]}'多維數組
AWK 本身只支持多維數組,不過我們可以很容易地使用一維數組模擬實現多維數組。
如下示例為一個 3x3 的三維數組:
100 200 300400 500 600700 800 900
以上實例中,array[0][0] 存儲 100,array[0][1] 存儲 200 ,依次類推。為了在 array[0][0] 處存儲 100, 我們可以使用如下語法: array["0,0"] = 100。
我們使用了 0,0 作為索引,但是這并不是兩個索引值。事實上,它是一個字符串索引 0,0。
下面是模擬二維數組的例子:
$ awk 'BEGIN {array["0,0"] = 100;array["0,1"] = 200;array["0,2"] = 300;array["1,0"] = 400;array["1,1"] = 500;array["1,2"] = 600;# 輸出數組元素print "array[0,0] = " array["0,0"];print "array[0,1] = " array["0,1"];print "array[0,2] = " array["0,2"];print "array[1,0] = " array["1,0"];print "array[1,1] = " array["1,1"];print "array[1,2] = " array["1,2"];}'
執行上面的命令可以得到如下結果:
array[0,0] = 100array[0,1] = 200array[0,2] = 300array[1,0] = 400array[1,1] = 500array[1,2] = 600
在數組上可以執行很多操作,比如,使用 asort 完成數組元素的排序,或者使用 asorti 實現數組索引的排序等等。
需求:將相同ip后的不定數值相加統計出來awk '{a[$1]+=$2}END{for(i in a)print i,a[i]}' file
思路:
將ip作為a[]數組的下標,將$2中的內容賦值給a[$1]即a[ip],得到數組a[ip]=value
執行語句a[ip]+=value,這樣同樣的a[ip]中的值就會與下一行的$2相加,然后得到新的值,繼續執行,直到文件末尾執行完畢
END模塊
用變量i讀取數組的下標,再取出數值a[i]即value值
最終得到結果
思考:(有什么不同)
awk 'a[$1]+=$2;END{for(i in a)print i,a[i]}' file
但在END前需要添加;表示結束,不然會發生語法錯誤
這個也能得到結果,執行后發現還是一個基礎的問題pattern跟action的問題
若沒有{}則表示pattern,action則表示1,即省略,會print $0;
其實都是一些細節問題。
篇幅有限,這里就不寫更多案例了,后面會分享更多關于自動化運維(devops)內容,感興趣的朋友可以關注下。
本文發布于:2023-02-28 20:12:00,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/167766255981532.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:awk數組(awk數組賦值).doc
本文 PDF 下載地址:awk數組(awk數組賦值).pdf
| 留言與評論(共有 0 條評論) |