亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Linux服務器 > 正文

Linux中的awk數組的基本使用方法

2024-09-05 23:04:56
字體:
來源:轉載
供稿:網友

1.awk數組描述

在其他的編程語言中,數組的下標都是從0開始的,也就是說,如果想反向引用數組中 的第一個元素,則需要引用對應的下標[0],在awk中數組也是通過引用下標的方法,但是在awk中數組的下標是從1開始的,在其他語言中,你可能會習慣于先“聲明”一個數組,在awk中,則不用這樣,直接為數組的元素賦值即可(其實如果自己給數組賦值,下標從1或者從0開始那就無所謂了?。?/p>

2.在聲明數組時,可能值很多,命令太長,降低命令可讀性,所以使用反斜杠“/”,來進 行換行,效果是完全一樣的,代碼如下所示:

[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.數組的元素設置為空,是允許的,當數組中沒有某個元素而直接引用它的時候,它默認被賦值為空,所以判斷某個元素是否存在,不能采用數組元素值為空的方法,而應該采用下面的方法:

[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

也可以采用取反的方式(使用運算符?。?/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數組下標

在awk中數組的下標不僅可以是“數字”,還可以是“任意字符串”,其實,awk中的數組本來就是“關聯數組”,之所以先用數字作為下標舉例子是為了方便之前的習慣,能夠有個好的過渡,不過,以數字作為數組的下標在某些場景有一定的優勢,但是本質上也是“關聯數組”,awk默認會把“數字”下標轉換成“字符串”,所以它本質上還是一個使用字符串作為下標的“關聯數組”

5.刪除數組元素

使用 delete 可以刪除數組中的元素,也可以使用 delete 刪除整個數組

[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循環遍歷數組

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

注:其中變量循環的是數組的下標

[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#無序的打印數組元素,進一步證明其是“關聯數組”#有序的打印數組元素[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數組使用實例

[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設置為1,對其進行自加運算,則其數值會增加1,這不難理解,那么如果變量a是一個字符串哪?

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

當a的值為字符串時,竟然也可以參與運算,而且可以看出,字符串被當成數字0參與運算,那么空字符串參與運算時也會被當成0運算嗎?

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

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

[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

這回你該發現awk數組這個特性的強大所在了吧,好,也許你會說我不用awk照樣可以統計啊,代碼如下所示:

[zkpk@master as]$ cat text | sort | uniq -c   3 Alice   3 Bob   2 Peter   2 Tom

好吧,我承認你這個思路很棒,但是你看看下面例子哪?統計文本中人名出現的次數

[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$#我們可以看出上面的文本中人名之間的分隔符有制表符,也有空格,來吧,統計人名出現的次數吧,#我使用awk數組的方式可以這樣統計[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,非得用其他命令實現可以參考如下代碼( ^_^ )

[zkpk@master as]$ cat text | tr -s "/t" " " | tr -s " " "/n" | sort | uniq -c   9 Alice   6 Bob   4 Peter   5 Tom

結尾

本文介紹了awk數組的基本使用方法,但是要學會靈活的運用,我在上面的示例中也寫出了一些可以在某種程度上替換awk數組的方式,所以本文不單單是介紹awk數組該如何使用,而是如何在合適的場景,選擇出最優的解決方案,快速高效的解決問題。這就是我一直追求的,也是我學習Linux命令的真實意圖。

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


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91色在线|| 久久成人人人人精品欧| 亚洲美女av电影| 性欧美激情精品| 国产亚洲欧美视频| 亚洲精品mp4| 欧美视频国产精品| 精品二区三区线观看| 精品国偷自产在线视频99| 亚洲欧洲中文天堂| 欧美丝袜一区二区三区| 欧美日韩国产精品一区二区不卡中文| 日韩在线观看高清| 国产精品十八以下禁看| 黄色精品在线看| xvideos亚洲人网站| 亚洲欧美日韩国产成人| 成人午夜一级二级三级| 日韩黄色在线免费观看| 91国产精品视频在线| 亚洲自拍小视频免费观看| 久久精品国产亚洲| 色中色综合影院手机版在线观看| 亚洲图片欧美午夜| 亚洲自拍偷拍一区| 久久五月天综合| 亚洲国产欧美一区| 亲子乱一区二区三区电影| 日韩极品精品视频免费观看| 亚洲性视频网站| 亚洲精品v天堂中文字幕| 欧美午夜www高清视频| 26uuu亚洲国产精品| 欧美激情videoshd| 亚洲欧美综合另类中字| 欧美激情精品久久久久久| 亚洲精品国产品国语在线| 亚州国产精品久久久| 992tv成人免费视频| 亚洲精品在线观看www| 国产日韩换脸av一区在线观看| 精品福利樱桃av导航| 国产成人精品在线视频| 日韩在线观看av| 亚洲成人激情在线| 激情久久av一区av二区av三区| 国产精品视频久久| 欧美老女人性视频| 91亚洲国产成人久久精品网站| 福利精品视频在线| 国产精品久久色| 亚洲精品白浆高清久久久久久| 国产精品一区电影| 国产成人啪精品视频免费网| 国产日韩欧美在线视频观看| 国产精品青草久久久久福利99| 欧美一级视频在线观看| 裸体女人亚洲精品一区| 黑人巨大精品欧美一区免费视频| 色偷偷综合社区| 久久久欧美一区二区| 欧美成人午夜影院| 欧美激情aaaa| 日本高清视频一区| 久久久精品免费视频| 欧美www在线| 亚洲区免费影片| 4k岛国日韩精品**专区| 狠狠干狠狠久久| 亚洲jizzjizz日本少妇| 91在线观看欧美日韩| 中文字幕在线观看亚洲| 国产99久久精品一区二区| 欧美性色19p| 国产精品亚洲自拍| 国产精品丝袜久久久久久不卡| 91精品国产精品| 国产精品成人av性教育| 国产一区视频在线播放| 午夜精品久久久久久久久久久久| www高清在线视频日韩欧美| 欧美理论片在线观看| 日韩免费在线免费观看| 精品中文字幕在线| 国产精品久久久久久网站| 91免费人成网站在线观看18| 国产精品视频yy9099| 国产在线精品自拍| 亚洲欧洲国产一区| 欧洲精品久久久| 精品视频在线播放| 亚洲成人网在线| 亚洲精品国产拍免费91在线| 亚洲日本欧美中文幕| 亚洲少妇中文在线| 92国产精品久久久久首页| 色在人av网站天堂精品| 亚洲va欧美va国产综合久久| www.亚洲一二| 国产大片精品免费永久看nba| 情事1991在线| 亚洲午夜色婷婷在线| 九九热这里只有精品免费看| 国产精品第二页| 日韩中文字幕在线观看| 911国产网站尤物在线观看| 国产在线精品一区免费香蕉| 久久精品国产亚洲精品2020| 久热国产精品视频| 国产日本欧美一区二区三区在线| 色综合久综合久久综合久鬼88| 国产精品久久久久av免费| 91精品国产91久久久久久吃药| 欧美在线欧美在线| 欧美日韩国产综合新一区| 黄色一区二区三区| 91精品国产成人| 国产精品久久久久77777| 成人在线播放av| 久久精品2019中文字幕| 91精品国产免费久久久久久| 久久久午夜视频| 久久精品这里热有精品| 国产主播喷水一区二区| 91久久精品视频| 亚洲成人免费网站| 国产精品精品一区二区三区午夜版| 日韩美女视频免费看| 国产成人精品免费久久久久| 国产精品狼人色视频一区| 欧美体内谢she精2性欧美| 91精品国产99久久久久久| 欧美性xxxx| 欧美一性一乱一交一视频| 91久久国产精品| 色偷偷av一区二区三区乱| 国产精品久久久久久五月尺| 日韩在线观看免费全集电视剧网站| 国产福利视频一区| 日韩av手机在线| 欧美国产日韩一区二区| 91精品国产高清久久久久久久久| 一色桃子一区二区| 日本久久久久久久久| 亚洲欧洲一区二区三区在线观看| 少妇精69xxtheporn| 免费av一区二区| 国产欧美日韩中文字幕在线| 激情懂色av一区av二区av| 久久久国产精品免费| 亚洲一品av免费观看| 国产日韩中文字幕在线| 亚洲天堂第一页| 亚洲人成电影在线观看天堂色| 亚洲xxxx18| 8x海外华人永久免费日韩内陆视频| 成人国产在线激情| 欧美日韩免费网站| 亚洲va男人天堂| 亚洲国产成人精品女人久久久| 中文字幕日韩欧美在线视频| 精品国内产的精品视频在线观看| 色悠悠国产精品| 亚洲亚裔videos黑人hd|