awk中的迴圈包括以下幾種:
下面依次舉例說明:
do-while
建立dowhile.awk,內容如下:
begin while( data !~ /^[yynn]$/)}
呼叫:
awk -f dowhile.awk輸出:
enter y or n !當輸出y或n的時候(大小寫均可)程式退出,其餘情況會要求再次輸入。
while
建立測試檔案address.dat,這是乙個通訊錄:
張三13512345678
李四 13811111111
每4行是一組記錄,用乙個空行間隔開來,現在要整理成每一行是一組記錄,下面是整理程式format-address.awk:
beginprint $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 5634 56 23 45 23
編寫awk程式檔案,for.awk:
end
執行:
awk -ffor.awk number.txt
輸出:
351說明:上面的程式實際上是求資料的總和,讀取每一行,將每一行的數值累加後賦給了total變數。
2.for-in迴圈
編寫awk程式檔案,forin.awk:
begin執行:
awk -f forin.awk輸出:
x[2] = 60x[last] = 70
x[1] = 50
可以看到,在awk中的陣列並不是按指定的順序逐個輸出的,而是亂序的。
迴圈相關指令
在awk中,與迴圈相關的指令包括:
下面舉例說明:
1.break
編寫awk程式檔案,break.awk:
begin}執行:
awk -fbreak
.awk
輸出:
iteration1iteration2
iteration3
iteration4
iteration5
iteration6
iteration7
iteration8
iteration9
iteration10
說明:while(1)是死迴圈,x在迴圈之外賦了初值為1,每迴圈一次x自加1,當x的值達到10時,跳出迴圈。
2.continue
編寫awk程式檔案,continue.awk:
beginprint "iteration"
,x }
} 執行:
awk -fcontinue
.awk
輸出:
iteration 1iteration 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:261025 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...