最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年08月17日 11:44:20   作者:蛋炒飯愛吃我  
這篇文章主要介紹了Linux中的awk數(shù)組的基本使用方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

1.awk數(shù)組描述

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

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

[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ù)組中沒有某個元素而直接引用它的時候,它默認(rèn)被賦值為空,所以判斷某個元素是否存在,不能采用數(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

也可以采用取反的方式(使用運算符?。?/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ù)字”,還可以是“任意字符串”,其實,awk中的數(shù)組本來就是“關(guān)聯(lián)數(shù)組”,之所以先用數(shù)字作為下標(biāo)舉例子是為了方便之前的習(xí)慣,能夠有個好的過渡,不過,以數(shù)字作為數(shù)組的下標(biāo)在某些場景有一定的優(yōu)勢,但是本質(zhì)上也是“關(guān)聯(lián)數(shù)組”,awk默認(rèn)會把“數(shù)字”下標(biāo)轉(zhuǎn)換成“字符串”,所以它本質(zhì)上還是一個使用字符串作為下標(biāo)的“關(guān)聯(lián)數(shù)組”

5.刪除數(shù)組元素

使用 delete 可以刪除數(shù)組中的元素,也可以使用 delete 刪除整個數(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ù)組元素,進一步證明其是“關(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ù)組使用實例

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

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

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

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

結(jié)果顯示,空字符串在參與運算時也會被當(dāng)做數(shù)字0,之前我們說過,當(dāng)我們引用數(shù)組中一個不存在的元素,元素被賦值成空字符串,當(dāng)對這個元素進行自加運算時,元素的值就變成了1,因此當(dāng)我們對一個不存在的元素進行自加運算后,這個元素的值就變成了自加的次數(shù),自加x次,元素的值就被賦值為x,自加y次元素的值就被賦值為y,所以我們可以通過awk數(shù)組的這個特性來統(tǒng)計文本中某字符串出現(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ù)組這個特性的強大所在了吧,好,也許你會說我不用awk照樣可以統(tǒng)計啊,代碼如下所示:

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

好吧,我承認(rèn)你這個思路很棒,但是你看看下面例子哪?統(tǒng)計文本中人名出現(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)計人名出現(xiàn)的次數(shù)吧,
#我使用awk數(shù)組的方式可以這樣統(tǒng)計
[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,非得用其他命令實現(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é)會靈活的運用,我在上面的示例中也寫出了一些可以在某種程度上替換awk數(shù)組的方式,所以本文不單單是介紹awk數(shù)組該如何使用,而是如何在合適的場景,選擇出最優(yōu)的解決方案,快速高效的解決問題。這就是我一直追求的,也是我學(xué)習(xí)Linux命令的真實意圖。

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

相關(guān)文章

  • 淺談Linux中的chattr與lsattr命令

    淺談Linux中的chattr與lsattr命令

    下面小編就為大家?guī)硪黄獪\談Linux中的chattr與lsattr命令。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • CentOS8.0 安裝配置ftp服務(wù)器的實現(xiàn)方法

    CentOS8.0 安裝配置ftp服務(wù)器的實現(xiàn)方法

    這篇文章主要介紹了CentOS8.0 安裝配置ftp服務(wù)器的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 一步步教你如何開啟、關(guān)閉ubuntu防火墻

    一步步教你如何開啟、關(guān)閉ubuntu防火墻

    這篇文章主要給大家介紹了關(guān)于如何開啟、關(guān)閉ubuntu防火墻的相關(guān)資料,文中將ubuntu系統(tǒng)中防火墻的安裝以及使用介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • linux備份與恢復(fù)基礎(chǔ)知識

    linux備份與恢復(fù)基礎(chǔ)知識

    備份會改變atime,tar,cpio,dd都會這樣做,dump通過原始設(shè)備來讀取文件系統(tǒng),因此它不會改變atime.
    2009-03-03
  • Linux系統(tǒng)關(guān)機命令之間的區(qū)別及用法詳解

    Linux系統(tǒng)關(guān)機命令之間的區(qū)別及用法詳解

    在本篇文章里小編給大家整理了一篇關(guān)于Linux系統(tǒng)關(guān)機命令之間的區(qū)別及用法詳解內(nèi)容,有需要的朋友們參考學(xué)習(xí)下。
    2020-12-12
  • 解決shell無法執(zhí)行的問題

    解決shell無法執(zhí)行的問題

    這篇文章主要介紹了解決shell無法執(zhí)行的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Linux下為PHP添加擴展庫的方法

    Linux下為PHP添加擴展庫的方法

    我剛剛開始學(xué)習(xí)lnmp環(huán)境,對php編譯的參數(shù)基本上都不知道,在網(wǎng)上看了很多教程,看到在編譯PhP的時候都還了很多參數(shù),也在網(wǎng)上查了這些參數(shù)是什么意思,但是卻不知道,哪些參數(shù)必須要加上,哪些參數(shù)不需要加
    2012-09-09
  • Linux命令搜索命令whereis與which的區(qū)別

    Linux命令搜索命令whereis與which的區(qū)別

    這篇文章主要介紹了Linux命令搜索命令whereis與which的區(qū)別的相關(guān)資料,這里舉例說明該如何區(qū)別他們之家的用法,需要的朋友可以參考下
    2017-08-08
  • 在 Ubuntu 上安裝 Protobuf 3 的教程詳解

    在 Ubuntu 上安裝 Protobuf 3 的教程詳解

    這篇文章主要介紹了在 Ubuntu 上安裝 Protobuf 3遇到問題及解決方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-06-06
  • Linux命令之fdisk磁盤分區(qū)工具使用

    Linux命令之fdisk磁盤分區(qū)工具使用

    這篇文章主要介紹了Linux命令之fdisk磁盤分區(qū)工具使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論

伊吾县| 抚远县| 建宁县| 内乡县| 卓尼县| 临沂市| 揭阳市| 高州市| 平乡县| 孝昌县| 濮阳市| 三穗县| 原平市| 交城县| 南华县| 河曲县| 沙湾县| 崇左市| 威远县| 瓮安县| 嵩明县| 平舆县| 海兴县| 宁河县| 云安县| 阿坝县| 贵港市| 宜良县| 库伦旗| 乌兰县| 甘南县| 彭水| 曲沃县| 紫金县| 富源县| 静海县| 洛川县| 湖南省| 华宁县| 积石山| 绩溪县|