awk學習筆記 14 迴圈

2021-09-20 20:00:32 字數 2702 閱讀 8920

awk中的迴圈包括以下幾種:

下面依次舉例說明:

do-while

建立dowhile.awk,內容如下:

begin  while

( data !~ /^[yynn]$/)} 

呼叫:

awk -f dowhile.awk 

輸出:

enter y or n !  

當輸出y或n的時候(大小寫均可)程式退出,其餘情況會要求再次輸入。

while

建立測試檔案address.dat,這是乙個通訊錄:

張三 

13512345678 

[email protected] 

李四 13811111111 

[email protected] 

每4行是一組記錄,用乙個空行間隔開來,現在要整理成每一行是一組記錄,下面是整理程式format-address.awk:

begin  

print $nf "\n"

} 執行:

awk -f format-address.awk address.dat 

輸出:

程式說明:

在begin段中,設定了如下的內建變數:

while迴圈段中nf(記錄字段數)作為迴圈條件,x變數依次被組拼成$1-$3,用製表符(\t)間隔開來。$4輸出後,追加乙個換行符(\n)。

for/for-in

awk中for迴圈有兩種:

舉例說明:

1.普通for迴圈

建立測試資料檔案number.txt,內容如下:

12 23 34 45 56 

34 56 23 45 23 

編寫awk程式檔案,for.awk:

end  

執行:

awk -f 

for.awk number.txt 

輸出:

351 

說明:上面的程式實際上是求資料的總和,讀取每一行,將每一行的數值累加後賦給了total變數。

2.for-in迴圈

編寫awk程式檔案,forin.awk:

begin  

執行:

awk -f forin.awk 

輸出:

x[2] = 60 

x[last] = 70 

x[1] = 50 

可以看到,在awk中的陣列並不是按指定的順序逐個輸出的,而是亂序的。

迴圈相關指令

在awk中,與迴圈相關的指令包括:

下面舉例說明:

1.break

編寫awk程式檔案,break.awk:

begin} 

執行:

awk -f 

break

.awk 

輸出:

iteration1 

iteration2 

iteration3 

iteration4 

iteration5 

iteration6 

iteration7 

iteration8 

iteration9 

iteration10 

說明:while(1)是死迴圈,x在迴圈之外賦了初值為1,每迴圈一次x自加1,當x的值達到10時,跳出迴圈。

2.continue

編寫awk程式檔案,continue.awk:

begin  

print "iteration"

,x } 

} 執行:

awk -f 

continue

.awk 

輸出:

iteration 1 

iteration 2 

iteration 3 

iteration 5 

iteration 6 

iteration 7 

iteration 8 

說明:上面的程式在x等於4的時候執行了continue,結束了一次迴圈,少輸出了一次,所以總共只輸出了7條記錄。

3.next

用之前的arr.dat檔案來做測試:

awk 

'else}'

arr.dat 

輸出:

1101 7:32 

說明:第一列中以10開頭的記錄會被跳過,其餘的會輸出。

4.exit

awk 

'else}end '

arr.dat 

輸出:

1034 7:26  

1025 7:27 

over 

說明:如果第一列匹配11開頭,就結束程式,在end段會輸出over。可見exit並不會終止end段的執行。

awk學習筆記

單詞計數 cat filename awk end 排序演算法 bin bash function f while n 1 do f 1 shift done wait 顯示特殊符 var i am a student echo var awk 結果為 am a i student echo var...

awk學習筆記

1 將第一列重複的元素去掉,只保留第乙個 root centos awk test cat sed u.txt haha 1 nihao 1 haha 3 hehe 4 heihei 5 heihei 6 1 haha 1 heihei root centos awk test awk f a 1 ...

AWK學習筆記

1.awk是三個 人名的縮寫,他們是 aho peter weinberg和 brain kernighan。awk是一種樣式掃瞄與處理工具。但其功能卻大大強於sed和grep。awk支援對記錄和字段的處理,其中對字段的處理是grep和sed不能實現 的,這也是awk優於二者的原因之一。2.與其它u...