awk中的使用循環(huán)是怎么樣的,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
創(chuàng)新互聯(lián)建站主要從事網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)丹寨,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):028-86922220
導(dǎo)讀 | awk 腳本有三個(gè)主要部分:BEGIN 和 END 函數(shù)(都可選),用戶自己寫(xiě)的每次要執(zhí)行的函數(shù)。某種程度上,awk 的主體部分就是一個(gè)循環(huán),因?yàn)楹瘮?shù)中的 命令對(duì)每一條記錄都會(huì)執(zhí)行一次。然而,有時(shí)你希望對(duì)于一條記錄執(zhí)行多次 命令,那么你就需要用到循環(huán)。 |
來(lái)學(xué)習(xí)一下多次執(zhí)行同一條命令的不同類(lèi)型的循環(huán)。
awk 腳本有三個(gè)主要部分:BEGIN 和 END 函數(shù)(都可選),用戶自己寫(xiě)的每次要執(zhí)行的函數(shù)。某種程度上,awk 的主體部分就是一個(gè)循環(huán),因?yàn)楹瘮?shù)中的命令對(duì)每一條記錄都會(huì)執(zhí)行一次。然而,有時(shí)你希望對(duì)于一條記錄執(zhí)行多次命令,那么你就需要用到循環(huán)。
有多種類(lèi)型的循環(huán),分別適合不同的場(chǎng)景。
while 循環(huán)
一個(gè) while 循環(huán)檢測(cè)一個(gè)表達(dá)式,如果表達(dá)式為 true 就執(zhí)行命令。當(dāng)表達(dá)式變?yōu)?false 時(shí),循環(huán)中斷。
#!/bin/awk -f BEGIN { # Loop through 1 to 10 i=1; while (i <= 10) { print i, " to the second power is ", i*i; i = i+1; } exit; }
在這個(gè)簡(jiǎn)單實(shí)例中,awk 打印了放在變量 i 中的整數(shù)值的平方。while (i <= 10) 語(yǔ)句告訴 awk 僅在 i 的值小于或等于 10 時(shí)才執(zhí)行循環(huán)。在循環(huán)最后一次執(zhí)行時(shí)(i 的值是 10),循環(huán)終止。 [yiji]do-while 循環(huán)[/yiji] do-while 循環(huán)執(zhí)行在關(guān)鍵字 do 之后的命令。在每次循環(huán)結(jié)束時(shí)檢測(cè)一個(gè)測(cè)試表達(dá)式來(lái)決定是否終止循環(huán)。僅在測(cè)試表達(dá)式返回 true 時(shí)才會(huì)重復(fù)執(zhí)行命令(即還沒(méi)有到終止循環(huán)的條件)。如果測(cè)試表達(dá)式返回 false,因?yàn)榈搅私K止循環(huán)的條件所以循環(huán)被終止。
#!/usr/bin/awk -f BEGIN { i=2; do { print i, " to the second power is ", i*i; i = i + 1 } while (i < 10) exit; }
for 循環(huán)
awk 中有兩種 for 循環(huán)。
一種 for 循環(huán)初始化一個(gè)變量,檢測(cè)一個(gè)測(cè)試表達(dá)式,執(zhí)行變量遞增,當(dāng)表達(dá)式的結(jié)果為 true 時(shí)循環(huán)就會(huì)一直執(zhí)行。
#!/bin/awk -f BEGIN { for (i=1; i <= 10; i++) { print i, " to the second power is ", i*i; } exit; }
另一種 for 循環(huán)設(shè)置一個(gè)有連續(xù)索引的數(shù)組變量,對(duì)每一個(gè)索引執(zhí)行一個(gè)命令集。換句話說(shuō),它用一個(gè)數(shù)組“收集”每一條命令執(zhí)行后的結(jié)果。
本例實(shí)現(xiàn)了一個(gè)簡(jiǎn)易版的 Unix 命令 uniq。通過(guò)把一系列字符串作為鍵加到數(shù)組 a 中,當(dāng)相同的鍵再次出現(xiàn)時(shí)就增加鍵值,可以得到某個(gè)字符串出現(xiàn)的次數(shù)(就像 uniq 的 --count 選項(xiàng))。如果你打印該數(shù)組的所有鍵,將會(huì)得到出現(xiàn)過(guò)的所有字符串。
用演示文件 colours.txt(前一篇文章中的文件)來(lái)舉例:
name color amount apple red 4 banana yellow 6 raspberry red 99 strawberry red 3 grape purple 10 apple green 8 plum purple 2 kiwi brown 4 potato brown 9 pineapple yellow 5
這是 awk 版的簡(jiǎn)易 uniq -c:
#! /usr/bin/awk -f NR != 1 { a[$2]++ } END { for (key in a) { print a[key] " " key } }
示例數(shù)據(jù)文件的第三列是第一列列出的條目的計(jì)數(shù)。你可以用一個(gè)數(shù)組和 for 循環(huán)來(lái)按顏色統(tǒng)計(jì)第三列的條目。
#! /usr/bin/awk -f BEGIN { FS=" "; OFS="\t"; print("color\tsum"); } NR != 1 { a[$2]+=$3; } END { for (b in a) { print b, a[b] } }
你可以看到,在處理文件之前也需要在 BEFORE 函數(shù)(僅僅執(zhí)行一次)中打印一列表頭。
循環(huán)
在任何編程語(yǔ)言中循環(huán)都是很重要的一部分,awk 也不例外。使用循環(huán)你可以控制 awk 腳本怎樣去運(yùn)行,它可以統(tǒng)計(jì)什么信息,還有它怎么去處理你的數(shù)據(jù)。
看完上述內(nèi)容,你們掌握awk中的使用循環(huán)是怎么樣的的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!