溫馨提示×

溫馨提示×

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

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

怎么在awk中使用循環(huán)

發(fā)布時(shí)間:2021-09-01 20:33:09 來源:億速云 閱讀:138 作者:chen 欄目:系統(tǒng)運(yùn)維

本篇內(nèi)容介紹了“怎么在awk中使用循環(huán)”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!



awk 腳本有三個(gè)主要部分:BEGINEND 函數(shù)(都可選),用戶自己寫的每次要執(zhí)行的函數(shù)。某種程度上,awk 的主體部分就是一個(gè)循環(huán),因?yàn)楹瘮?shù)中的命令對每一條記錄都會執(zhí)行一次。然而,有時(shí)你希望對于一條記錄執(zhí)行多次命令,那么你就需要用到循環(huán)。

有多種類型的循環(huán),分別適合不同的場景。

while 循環(huán)

一個(gè) while 循環(huán)檢測一個(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è)簡單實(shí)例中,awk 打印了放在變量 i 中的整數(shù)值的平方。while (i <= 10) 語句告訴 awk 僅在 i 的值小于或等于 10 時(shí)才執(zhí)行循環(huán)。在循環(huán)最后一次執(zhí)行時(shí)(i 的值是 10),循環(huán)終止。

do-while 循環(huán)

do-while 循環(huán)執(zhí)行在關(guān)鍵字 do 之后的命令。在每次循環(huán)結(jié)束時(shí)檢測一個(gè)測試表達(dá)式來決定是否終止循環(huán)。僅在測試表達(dá)式返回 true 時(shí)才會重復(fù)執(zhí)行命令(即還沒有到終止循環(huán)的條件)。如果測試表達(dá)式返回 false,因?yàn)榈搅私K止循環(huán)的條件所以循環(huán)被終止。

#!/usr/bin/awk -fBEGIN {         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è)變量,檢測一個(gè)測試表達(dá)式,執(zhí)行變量遞增,當(dāng)表達(dá)式的結(jié)果為 true 時(shí)循環(huán)就會一直執(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ù)組變量,對每一個(gè)索引執(zhí)行一個(gè)命令集。換句話說,它用一個(gè)數(shù)組“收集”每一條命令執(zhí)行后的結(jié)果。

本例實(shí)現(xiàn)了一個(gè)簡易版的 Unix 命令 uniq。通過把一系列字符串作為鍵加到數(shù)組 a 中,當(dāng)相同的鍵再次出現(xiàn)時(shí)就增加鍵值,可以得到某個(gè)字符串出現(xiàn)的次數(shù)(就像 uniq--count 選項(xiàng))。如果你打印該數(shù)組的所有鍵,將會得到出現(xiàn)過的所有字符串。

用演示文件 colours.txt(前一篇文章中的文件)來舉例:

name       color  amountapple      red    4banana     yellow 6raspberry  red    99strawberry red    3grape      purple 10apple      green  8plum       purple 2kiwi       brown  4potato     brown  9pineapple  yellow 5

這是 awk 版的簡易 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)來按顏色統(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í)行一次)中打印一列表頭。

“怎么在awk中使用循環(huán)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

awk
AI