awk中使用迴圈

2021-10-01 15:49:56 字數 1777 閱讀 5026

awk 指令碼有三個主要部分:begin 和 end 函式(都可選),使用者自己寫的每次要執行的函式。某種程度上,awk 的主體部分就是乙個迴圈,因為函式中的命令對每一條記錄都會執行一次。然而,有時你希望對於一條記錄執行多次命令,那麼你就需要用到迴圈。

來學習一下多次執行同一條命令的不同型別的迴圈。

awk 指令碼有三個主要部分:begin 和 end 函式(都可選),使用者自己寫的每次要執行的函式。某種程度上,awk 的主體部分就是乙個迴圈,因為函式中的命令對每一條記錄都會執行一次。然而,有時你希望對於一條記錄執行多次命令,那麼你就需要用到迴圈。

有多種型別的迴圈,分別適合不同的場景。

while 迴圈

乙個 while 迴圈檢測乙個表示式,如果表示式為 true 就執行命令。當表示式變為 false 時,迴圈中斷。

#!/bin/awk -f

begin

exit;

}

在這個簡單例項中,awk 列印了放在變數 i 中的整數值的平方。while (i <= 10) 語句告訴 awk 僅在 i 的值小於或等於 10 時才執行迴圈。在迴圈最後一次執行時(i 的值是 10),迴圈終止。 [yiji]do-while 迴圈[/yiji] do-while 迴圈執行在關鍵字 do 之後的命令。在每次迴圈結束時檢測乙個測試表示式來決定是否終止迴圈。僅在測試表示式返回 true 時才會重複執行命令(即還沒有到終止迴圈的條件)。如果測試表示式返回 false,因為到了終止迴圈的條件所以迴圈被終止。

#!/usr/bin/awk -f

begin

while (i < 10)

exit;

}

for 迴圈

awk 中有兩種 for 迴圈。

一種 for 迴圈初始化乙個變數,檢測乙個測試表示式,執行變數遞增,當表示式的結果為 true 時迴圈就會一直執行。

#!/bin/awk -f

begin

exit;

}

另一種 for 迴圈設定乙個有連續索引的陣列變數,對每乙個索引執行乙個命令集。換句話說,它用乙個陣列「收集」每一條命令執行後的結果。

本例實現了乙個簡易版的 unix 命令 uniq。通過把一系列字串作為鍵加到陣列 a 中,當相同的鍵再次出現時就增加鍵值,可以得到某個字串出現的次數(就像 uniq 的 --count 選項)。如果你列印該陣列的所有鍵,將會得到出現過的所有字串。

name       color  amount

banana yellow 6

raspberry red 99

strawberry red 3

grape purple 10

plum purple 2

kiwi brown 4

potato brown 9

這是 awk 版的簡易 uniq -c:

#! /usr/bin/awk -f

nr != 1

end

}

示例資料檔案的第三列是第一列列出的條目的計數。你可以用乙個陣列和 for 迴圈來按顏色統計第三列的條目。

#! /usr/bin/awk -f

begin

nr != 1

end

}

你可以看到,在處理檔案之前也需要在 before 函式(僅僅執行一次)中列印一列表頭。

迴圈

awk中使用迴圈

awk 指令碼有三個主要部分 begin 和 end 函式 都可選 使用者自己寫的每次要執行的函式。某種程度上,awk 的主體部分就是乙個迴圈,因為函式中的命令對每一條記錄都會執行一次。然而,有時你希望對於一條記錄執行多次命令,那麼你就需要用到迴圈。來學習一下多次執行同一條命令的不同型別的迴圈。aw...

在Window中使用 AWK

一直以來都認為awk只能在linux unix中才能使用,今天偶然查到有window版本的awk。安裝設定path,包含安裝目錄 c program files x86 gnuwin32 bin 說明 源資料是模擬售票機的歷史記錄,字段含義 銷售日期,出發站名稱,到達站名稱,購買票的數量,總金額 d...

awk中使用shell變數

其實在awk裡,是不能直接使用shell變數的 方法是 awk v 選項讓awk 裡使用shell變數 time 60 awk v time time begin 這樣要注意 在awk裡,time不能加 符號。網上說如下方法都可行 一 var 這種寫法大家無需改變用 括起awk程式的習慣,是老外常用...