濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Linux中的awk數(shù)組的基本使用方法

Linux中的awk數(shù)組的基本使用方法

熱門(mén)標(biāo)簽:撫順地圖標(biāo)注 新余高德地圖標(biāo)注怎么修改 高德地圖標(biāo)注好做嗎 如何分析地圖標(biāo)注 外呼系統(tǒng)坐席費(fèi)計(jì)入會(huì)計(jì)哪個(gè)科目 大連400電話(huà)如何申請(qǐng) 電銷(xiāo)機(jī)器人怎么接線(xiàn)路 電銷(xiāo)機(jī)器人價(jià)值 達(dá)亞電銷(xiāo)機(jī)器人官網(wǎng)

1.awk數(shù)組描述

在其他的編程語(yǔ)言中,數(shù)組的下標(biāo)都是從0開(kāi)始的,也就是說(shuō),如果想反向引用數(shù)組中 的第一個(gè)元素,則需要引用對(duì)應(yīng)的下標(biāo)[0],在awk中數(shù)組也是通過(guò)引用下標(biāo)的方法,但是在awk中數(shù)組的下標(biāo)是從1開(kāi)始的,在其他語(yǔ)言中,你可能會(huì)習(xí)慣于先“聲明”一個(gè)數(shù)組,在awk中,則不用這樣,直接為數(shù)組的元素賦值即可(其實(shí)如果自己給數(shù)組賦值,下標(biāo)從1或者從0開(kāi)始那就無(wú)所謂了?。?/p>

2.在聲明數(shù)組時(shí),可能值很多,命令太長(zhǎng),降低命令可讀性,所以使用反斜杠“\”,來(lái)進(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ù)組中沒(méi)有某個(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ù)組本來(lái)就是“關(guān)聯(lián)數(shù)組”,之所以先用數(shù)字作為下標(biāo)舉例子是為了方便之前的習(xí)慣,能夠有個(gè)好的過(guò)渡,不過(guò),以數(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ù)組

語(yǔ)法:for(變量 in 數(shù)組名){ 代碼語(yǔ)句 }

注:其中變量循環(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
#無(wú)序的打印數(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,之前我們說(shuō)過(guò),當(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,所以我們可以通過(guò)awk數(shù)組的這個(gè)特性來(lái)統(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ì)說(shuō)我不用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$
#我們可以看出上面的文本中人名之間的分隔符有制表符,也有空格,來(lái)吧,統(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

結(jié)尾

本文介紹了awk數(shù)組的基本使用方法,但是要學(xué)會(huì)靈活的運(yùn)用,我在上面的示例中也寫(xiě)出了一些可以在某種程度上替換awk數(shù)組的方式,所以本文不單單是介紹awk數(shù)組該如何使用,而是如何在合適的場(chǎng)景,選擇出最優(yōu)的解決方案,快速高效的解決問(wèn)題。這就是我一直追求的,也是我學(xué)習(xí)Linux命令的真實(shí)意圖。

以上所述是小編給大家介紹的Linux中的awk數(shù)組的基本使用方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

標(biāo)簽:新鄉(xiāng) 衡水 海東 南通 湖南 楊凌 黃石 遼源

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux中的awk數(shù)組的基本使用方法》,本文關(guān)鍵詞  Linux,中的,awk,數(shù)組,的,基本,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Linux中的awk數(shù)組的基本使用方法》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Linux中的awk數(shù)組的基本使用方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    灌阳县| 东明县| 丽江市| 桃园市| 佛学| 安西县| 凤城市| 白银市| 德庆县| 成安县| 安远县| 家居| 石林| 正阳县| 唐海县| 天台县| 大关县| 石家庄市| 闽侯县| 伊川县| 平昌县| 河源市| 兴业县| 巴塘县| 成都市| 始兴县| 鄂托克前旗| 上林县| 文成县| 河东区| 定结县| 阳谷县| 乐亭县| 汉寿县| 宜兴市| 疏附县| 潮州市| 工布江达县| 水富县| 威远县| 托克逊县|