91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

awk數組怎么在Linux系統中使用

發布時間:2021-02-23 17:37:01 來源:億速云 閱讀:233 作者:Leah 欄目:服務器

今天就跟大家聊聊有關awk數組怎么在Linux系統中使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

1.awk數組描述

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

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

也可以采用取反的方式(使用運算符!)

[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]}'
one
three
____(空)

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

[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設置為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 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

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

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

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

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

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

看完上述內容,你們對awk數組怎么在Linux系統中使用有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长治县| 溧阳市| 蓬莱市| 六枝特区| 江华| 吐鲁番市| 会泽县| 玉环县| 五华县| 潜江市| 万山特区| 长春市| 仁寿县| 富川| 勃利县| 崇仁县| 邛崃市| 兴文县| 罗平县| 苍溪县| 舒城县| 嵩明县| 南江县| 湛江市| 汪清县| 泽普县| 揭阳市| 大丰市| 兴城市| 股票| 鹤山市| 兖州市| 张家港市| 明光市| 乡城县| 于田县| 江油市| 麻阳| 吉林省| 伊春市| 津市市|