awk中使用迴圈
導讀 | awk 有三個主要部分:BEGIN 和 END 函式(都可選),使用者自己寫的每次要執行的函式。某種程度上,awk 的主體部分就是一個迴圈,因為函式中的 對每一條記錄都會執行一次。然而,有時你希望對於一條記錄執行多次 ,那麼你就需要用到迴圈。 |
來學習一下多次執行同一條命令的不同型別的迴圈。
awk 有三個主要部分:BEGIN 和 END 函式(都可選),使用者自己寫的每次要執行的函式。某種程度上,awk 的主體部分就是一個迴圈,因為函式中的命令對每一條記錄都會執行一次。然而,有時你希望對於一條記錄執行多次命令,那麼你就需要用到迴圈。
有多種型別的迴圈,分別適合不同的場景。
一個 while 迴圈檢測一個表示式,如果表示式為 true 就執行命令。當表示式變為 false 時,迴圈中斷。
#!/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; }
在這個簡單例項中,awk 列印了放在變數 i 中的整數值的平方。while (i <= 10) 語句告訴 awk 僅在 i 的值小於或等於 10 時才執行迴圈。在迴圈最後一次執行時(i 的值是 10),迴圈終止。 [yiji]do-while 迴圈[/yiji] do-while 迴圈執行在關鍵字 do 之後的命令。在每次迴圈結束時檢測一個測試表示式來決定是否終止迴圈。僅在測試表示式返回 true 時才會重複執行命令(即還沒有到終止迴圈的條件)。如果測試表示式返回 false,因為到了終止迴圈的條件所以迴圈被終止。
#!/usr/bin/awk -f BEGIN { i=2; do { print i, " to the second power is ", i*i; i = i + 1 } while (i < 10) exit; }
awk 中有兩種 for 迴圈。
一種 for 迴圈初始化一個變數,檢測一個測試表示式,執行變數遞增,當表示式的結果為 true 時迴圈就會一直執行。
#!/bin/awk -f BEGIN { for (i=1; i <= 10; i++) { print i, " to the second power is ", i*i; } exit; }
另一種 for 迴圈設定一個有連續索引的陣列變數,對每一個索引執行一個命令集。換句話說,它用一個陣列“收集”每一條命令執行後的結果。
本例實現了一個簡易版的 Unix 命令 uniq。透過把一系列字串作為鍵加到陣列 a 中,當相同的鍵再次出現時就增加鍵值,可以得到某個字串出現的次數(就像 uniq 的 --count 選項)。如果你列印該陣列的所有鍵,將會得到出現過的所有字串。
用演示檔案 colours.txt(前一篇文章中的檔案)來舉例:
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 版的簡易 uniq -c:
#! /usr/bin/awk -f NR != 1 { a[$2]++ } END { for (key in a) { print a[key] " " key } }
示例資料檔案的第三列是第一列列出的條目的計數。你可以用一個陣列和 for 迴圈來按顏色統計第三列的條目。
#! /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 函式(僅僅執行一次)中列印一列表頭。
在任何程式語言中迴圈都是很重要的一部分,awk 也不例外。使用迴圈你可以控制 awk 指令碼怎樣去執行,它可以統計什麼資訊,還有它怎麼去處理你的資料。我們下一篇文章會討論 switch、continue 和 next 語句。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2669895/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在 awk 中怎麼使用迴圈
- AWK if(條件)語句與迴圈簡介
- C#程式設計基礎第七課:C#中的基本迴圈語句:while迴圈、do-while迴圈、for迴圈、foreach迴圈的使用C#程式設計While
- 迴圈中的非同步&&迴圈中的閉包非同步
- [譯] 減少 Python 中迴圈的使用Python
- scss中迴圈之@for迴圈佈局畫圓CSS
- kotlin的迴圈使用Kotlin
- for 迴圈與 while 迴圈While
- while迴圈 case迴圈While
- C語言——迴圈結構(for迴圈,while迴圈,do-while迴圈)C語言While
- Go 1.22 中的 For 迴圈Go
- JavaScript中的while迴圈JavaScriptWhile
- 理解 JavaScript 中的迴圈JavaScript
- Redis 中的事件迴圈Redis事件
- Node中的事件迴圈事件
- 無限for迴圈(死迴圈)
- 迴圈遍歷中幾個高頻使用的方法
- Python 迴圈語句的使用Python
- 分別使用while迴圈、do…while迴圈和for迴圈輸出1~100之間的所有偶數While
- 結構體的使用 for迴圈使用方式結構體
- go 中的迴圈依賴Go
- for 迴圈中倒序 用reverse
- Spring中的迴圈依賴Spring
- Kotlin 中的迴圈全解Kotlin
- while迴圈以及do while迴圈While
- 迴圈派:2021中國迴圈經濟企業實踐白皮書
- matlab 迴圈中使用的儲存資料方法 #更新中Matlab
- if迴圈
- 迴圈
- for迴圈
- if for迴圈
- For 迴圈
- 使用 Python 迴圈建立多個列表Python
- 04流程控制 for迴圈,while迴圈While
- Python中for迴圈和while迴圈有什麼區別?Python入門教程PythonWhile
- C語言程式設計學習中while迴圈和do……while迴圈C語言程式設計While
- Spring 中 bean 的迴圈依賴SpringBean
- PyThon range()函式中for迴圈用法Python函式