国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務(wù)器 > Linux服務(wù)器 > 正文

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

2024-09-05 23:04:56
字體:
供稿:網(wǎng)友

1.awk數(shù)組描述

在其他的編程語言中,數(shù)組的下標(biāo)都是從0開始的,也就是說,如果想反向引用數(shù)組中 的第一個(gè)元素,則需要引用對應(yīng)的下標(biāo)[0],在awk中數(shù)組也是通過引用下標(biāo)的方法,但是在awk中數(shù)組的下標(biāo)是從1開始的,在其他語言中,你可能會習(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)算符?。?/p>

[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)在某些場景有一定的優(yōu)勢,但是本質(zhì)上也是“關(guān)聯(lián)數(shù)組”,awk默認(rèn)會把“數(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]}'onethree____(空)

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]}}'fouronetwothree#無序的打印數(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]}}'onetwothreefour

7.awk數(shù)組使用實(shí)例

[zkpk@master as]$ awk 'BEGIN{a=1;print a; a=a+1 ; print a}'12[zkpk@master as]$ awk 'BEGIN{a=1;print a; a++ ; print a}'12

將變量a設(shè)置為1,對其進(jìn)行自加運(yùn)算,則其數(shù)值會增加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í)也會被當(dāng)成0運(yùn)算嗎?

[zkpk@master as]$ awk 'BEGIN{a="";print a; a++ ; print a}'____(空)

結(jié)果顯示,空字符串在參與運(yùn)算時(shí)也會被當(dāng)做數(shù)字0,之前我們說過,當(dāng)我們引用數(shù)組中一個(gè)不存在的元素,元素被賦值成空字符串,當(dāng)對這個(gè)元素進(jìn)行自加運(yùn)算時(shí),元素的值就變成了1,因此當(dāng)我們對一個(gè)不存在的元素進(jìn)行自加運(yùn)算后,這個(gè)元素的值就變成了自加的次數(shù),自加x次,元素的值就被賦值為x,自加y次元素的值就被賦值為y,所以我們可以通過awk數(shù)組的這個(gè)特性來統(tǒng)計(jì)文本中某字符串出現(xiàn)的次數(shù),代碼如下所示

[zkpk@master as]$ cat textAliceBobTomPeterAliceAliceTomBobPeterBob[zkpk@master as]$ awk '{count[$1]++};END{for(i in count){print i,count[i]}}' textBob 3Tom 2Alice 3Peter 2

這回你該發(fā)現(xiàn)awk數(shù)組這個(gè)特性的強(qiáng)大所在了吧,好,也許你會說我不用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 textAlice^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]}}' textBob 6Tom 5Alice 9Peter 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é)會靈活的運(yùn)用,我在上面的示例中也寫出了一些可以在某種程度上替換awk數(shù)組的方式,所以本文不單單是介紹awk數(shù)組該如何使用,而是如何在合適的場景,選擇出最優(yōu)的解決方案,快速高效的解決問題。這就是我一直追求的,也是我學(xué)習(xí)Linux命令的真實(shí)意圖。

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


注:相關(guān)教程知識閱讀請移步到服務(wù)器教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 武夷山市| 望谟县| 都匀市| 芜湖市| 衢州市| 永泰县| 雷州市| 长乐市| 北宁市| 邻水| 龙里县| 万全县| 大同县| 视频| 丰台区| 丰宁| 泾阳县| 连南| 阿城市| 黔西县| 连江县| 保靖县| 北流市| 晋中市| 镇沅| 天津市| 盐亭县| 南昌县| 夏河县| 滨州市| 正阳县| 施秉县| 平山县| 白沙| 枝江市| 社会| 库车县| 肇东市| 靖远县| 晋中市| 周宁县|