今天就跟大家聊聊有關(guān)awk數(shù)組怎么在Linux系統(tǒng)中使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、鹽池網(wǎng)絡(luò)推廣、小程序定制開發(fā)、鹽池網(wǎng)絡(luò)營銷、鹽池企業(yè)策劃、鹽池品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供鹽池建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:jinyejixie.com
1.awk數(shù)組描述
在其他的編程語言中,數(shù)組的下標(biāo)都是從0開始的,也就是說,如果想反向引用數(shù)組中 的第一個(gè)元素,則需要引用對(duì)應(yīng)的下標(biāo)[0],在awk中數(shù)組也是通過引用下標(biāo)的方法,但是在awk中數(shù)組的下標(biāo)是從1開始的,在其他語言中,你可能會(huì)習(xí)慣于先“聲明”一個(gè)數(shù)組,在awk中,則不用這樣,直接為數(shù)組的元素賦值即可(其實(shí)如果自己給數(shù)組賦值,下標(biāo)從1或者從0開始那就無所謂了?。?/p>
2.在聲明數(shù)組時(shí),可能值很多,命令太長,降低命令可讀性,所以使用反斜杠“\”,來進(jìn) 行換行,效果是完全一樣的,代碼如下所示:
[zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three"\ ;arr[4]="four";print arr[3]}' three [zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three";arr[4]="four";print arr[3]}' three
3.數(shù)組的元素設(shè)置為空,是允許的,當(dāng)數(shù)組中沒有某個(gè)元素而直接引用它的時(shí)候,它默認(rèn)被賦值為空,所以判斷某個(gè)元素是否存在,不能采用數(shù)組元素值為空的方法,而應(yīng)該采用下面的方法:
[zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three";if(4 in arr){print "four in this arr"}}' [zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three";if(3 in arr){print "three in this arr"}}' three in this arr
也可以采用取反的方式(使用運(yùn)算符!)
[zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three";if(!(4 in arr)){print "four not in this arr"}}' four not in this arr
4.awk數(shù)組下標(biāo)
在awk中數(shù)組的下標(biāo)不僅可以是“數(shù)字”,還可以是“任意字符串”,其實(shí),awk中的數(shù)組本來就是“關(guān)聯(lián)數(shù)組”,之所以先用數(shù)字作為下標(biāo)舉例子是為了方便之前的習(xí)慣,能夠有個(gè)好的過渡,不過,以數(shù)字作為數(shù)組的下標(biāo)在某些場(chǎng)景有一定的優(yōu)勢(shì),但是本質(zhì)上也是“關(guān)聯(lián)數(shù)組”,awk默認(rèn)會(huì)把“數(shù)字”下標(biāo)轉(zhuǎn)換成“字符串”,所以它本質(zhì)上還是一個(gè)使用字符串作為下標(biāo)的“關(guān)聯(lián)數(shù)組”
5.刪除數(shù)組元素
使用 delete 可以刪除數(shù)組中的元素,也可以使用 delete 刪除整個(gè)數(shù)組
[zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three";\ > delete arr[1];print arr[1]}' ____(空) [zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three";\ print arr[1];print arr[3];delete arr;print arr[1]}' one three ____(空)
6.使用for循環(huán)遍歷數(shù)組
語法:for(變量 in 數(shù)組名){ 代碼語句 }
注:其中變量循環(huán)的是數(shù)組的下標(biāo)
[zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three";arr[4]="four";\ > for ( i in arr){print arr[i]}}' four one two three #無序的打印數(shù)組元素,進(jìn)一步證明其是“關(guān)聯(lián)數(shù)組” #有序的打印數(shù)組元素 [zkpk@master as]$ awk 'BEGIN{arr[1]="one";arr[2]="two";arr[3]="three";arr[4]="four";\ for ( i=1;i<=4;i++){print arr[i]}}' one two three four
7.awk數(shù)組使用實(shí)例
[zkpk@master as]$ awk 'BEGIN{a=1;print a; a=a+1 ; print a}' 1 2 [zkpk@master as]$ awk 'BEGIN{a=1;print a; a++ ; print a}' 1 2
將變量a設(shè)置為1,對(duì)其進(jìn)行自加運(yùn)算,則其數(shù)值會(huì)增加1,這不難理解,那么如果變量a是一個(gè)字符串哪?
[zkpk@master as]$ awk 'BEGIN{a="test";print a; a++ ; print a}' test
當(dāng)a的值為字符串時(shí),竟然也可以參與運(yùn)算,而且可以看出,字符串被當(dāng)成數(shù)字0參與運(yùn)算,那么空字符串參與運(yùn)算時(shí)也會(huì)被當(dāng)成0運(yùn)算嗎?
[zkpk@master as]$ awk 'BEGIN{a="";print a; a++ ; print a}' ____(空)
結(jié)果顯示,空字符串在參與運(yùn)算時(shí)也會(huì)被當(dāng)做數(shù)字0,之前我們說過,當(dāng)我們引用數(shù)組中一個(gè)不存在的元素,元素被賦值成空字符串,當(dāng)對(duì)這個(gè)元素進(jìn)行自加運(yùn)算時(shí),元素的值就變成了1,因此當(dāng)我們對(duì)一個(gè)不存在的元素進(jìn)行自加運(yùn)算后,這個(gè)元素的值就變成了自加的次數(shù),自加x次,元素的值就被賦值為x,自加y次元素的值就被賦值為y,所以我們可以通過awk數(shù)組的這個(gè)特性來統(tǒng)計(jì)文本中某字符串出現(xiàn)的次數(shù),代碼如下所示
[zkpk@master as]$ cat text Alice Bob Tom Peter Alice Alice Tom Bob Peter Bob [zkpk@master as]$ awk '{count[$1]++};END{for(i in count){print i,count[i]}}' text Bob 3 Tom 2 Alice 3 Peter 2
這回你該發(fā)現(xiàn)awk數(shù)組這個(gè)特性的強(qiáng)大所在了吧,好,也許你會(huì)說我不用awk照樣可以統(tǒng)計(jì)啊,代碼如下所示:
[zkpk@master as]$ cat text | sort | uniq -c 3 Alice 3 Bob 2 Peter 2 Tom
好吧,我承認(rèn)你這個(gè)思路很棒,但是你看看下面例子哪?統(tǒng)計(jì)文本中人名出現(xiàn)的次數(shù)
[zkpk@master as]$ cat -tE text Alice^IBob$ Bob^IAlice Alice Peter$ Tom Bob$ Peter Alice $ Alice Tom$ Alice^I^ITom $ Tom Peter$ Bob Bob$ Peter Alice$ Bob Alice Alice Tom$ #我們可以看出上面的文本中人名之間的分隔符有制表符,也有空格,來吧,統(tǒng)計(jì)人名出現(xiàn)的次數(shù)吧, #我使用awk數(shù)組的方式可以這樣統(tǒng)計(jì) [zkpk@master as]$ awk '{for(i=1;i<=NF;i++){count[$i]++} }END{for(j in count)\ {print j , count[j]}}' text Bob 6 Tom 5 Alice 9 Peter 4
但若你不用awk,非得用其他命令實(shí)現(xiàn)可以參考如下代碼( ^_^ )
[zkpk@master as]$ cat text | tr -s "\t" " " | tr -s " " "\n" | sort | uniq -c 9 Alice 6 Bob 4 Peter 5 Tom
看完上述內(nèi)容,你們對(duì)awk數(shù)組怎么在Linux系統(tǒng)中使用有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
當(dāng)前名稱:awk數(shù)組怎么在Linux系統(tǒng)中使用
分享URL:http://jinyejixie.com/article30/iehdso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、面包屑導(dǎo)航、標(biāo)簽優(yōu)化、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站設(shè)計(jì)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)