自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

[[284446]]

來(lái)學(xué)習(xí)一下多次執(zhí)行同一條命令的不同類型的循環(huán)。

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

有多種類型的循環(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)中斷。

  1. #!/bin/awk -f
  2.  
  3. BEGIN {
  4. # Loop through 1 to 10
  5.  
  6. i=1;
  7. while (i <= 10) {
  8. print i, " to the second power is ", i*i;
  9. i = i+1;
  10. }
  11. exit;
  12. }

在這個(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)終止。

do-while 循環(huán)

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)被終止。

  1. #!/usr/bin/awk -f
  2. BEGIN {
  3.  
  4. i=2;
  5. do {
  6. print i, " to the second power is ", i*i;
  7. i = i + 1
  8. }
  9. while (i < 10)
  10.  
  11. exit;
  12. }

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í)行。

  1. #!/bin/awk -f
  2.  
  3. BEGIN {
  4. for (i=1; i <= 10; i++) {
  5. print i, " to the second power is ", i*i;
  6. }
  7. exit;
  8. }

另一種 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)舉例:

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

這是 awk 版的簡(jiǎn)易 uniq -c

  1. #! /usr/bin/awk -f
  2.  
  3. NR != 1 {
  4.     a[$2]++
  5. }
  6. END {
  7.     for (key in a) {
  8.                 print a[key] " " key
  9.     }
  10. }

示例數(shù)據(jù)文件的第三列是第一列列出的條目的計(jì)數(shù)。你可以用一個(gè)數(shù)組和 for 循環(huán)來(lái)按顏色統(tǒng)計(jì)第三列的條目。

  1. #! /usr/bin/awk -f
  2.  
  3. BEGIN {
  4.     FS=" ";
  5.     OFS="\t";
  6.     print("color\tsum");
  7. }
  8. NR != 1 {
  9.     a[$2]+=$3;
  10. }
  11. END {
  12.     for (b in a) {
  13.         print b, a[b]
  14.     }
  15. }

你可以看到,在處理文件之前也需要在 BEFORE 函數(shù)(僅僅執(zhí)行一次)中打印一列表頭。

循環(huán)

在任何編程語(yǔ)言中循環(huán)都是很重要的一部分,awk 也不例外。使用循環(huán)你可以控制 awk 腳本怎樣去運(yùn)行,它可以統(tǒng)計(jì)什么信息,還有它怎么去處理你的數(shù)據(jù)。我們下一篇文章會(huì)討論 switch、continuenext 語(yǔ)句。 

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2016-08-29 20:51:16

awkLinux開(kāi)源

2016-08-10 16:07:08

awkLinux開(kāi)源

2016-08-11 09:18:33

awkShellLinux

2016-10-08 20:58:50

awkLinux編寫腳本

2016-07-29 15:13:00

awk文本處理工具編程

2019-12-12 18:00:54

awkLinux開(kāi)源

2022-03-20 10:40:11

Linuxawk 腳本

2016-08-10 11:19:11

awkLinux開(kāi)源

2017-11-23 09:00:02

Linuxcron計(jì)劃任務(wù)

2023-06-12 15:33:52

Scalafor循環(huán)語(yǔ)句

2010-05-11 10:29:06

Unix awk

2010-09-08 17:15:45

SQL循環(huán)結(jié)構(gòu)

2023-06-15 17:00:11

Rust循環(huán)

2010-03-04 15:28:01

Ubuntu Shel

2009-11-25 10:52:22

PHP函數(shù)contin

2017-08-04 14:00:32

Linuxawk變量

2024-09-11 17:00:36

2019-11-26 14:00:58

awkLinux命令

2010-05-11 13:16:21

Unix awk

2021-03-25 09:58:22

鴻蒙HarmonyOS應(yīng)用開(kāi)發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)