Linux awk 系列文章之 awk 循環:for 和 while 示例

如果您想學習linux awk命令編程,那您必須要知道awk循環命令,主要是 for 和 while。

linux awk for循環

首先,讓我們執行以下命令,看看我們能得到什麼。

➜ awk -F"#" '{
for(i=1;i<=NF;i++) {
if($i == "google") {
print "NF=" i ", this is a refer";
} else {
print "NF=" i "," $i
}
}
}' test-2.txt

test-2.txt的內容是:

192.168.1.1#10.10.83.92#/url/test#google#1234322344

上面命令的結果如下:

NF=1,192.168.1.1
NF=2,10.10.83.92
NF=3,/url/test
NF=4, this is a refer
NF=5,1234322344
Linux awk 系列文章之 awk 循環:for 和 while 示例

那麼讓我們來看看上面的awk命令是如何執行的呢?

我們一行一行地看一下:

1.awk -F"#"

根據“#”剪切文件test.txt的內容,即:
field 1: 192.168.1.1
field 2: 10.10.83.92
field 3: /url/test
field 4: google
field 5: 1234322344

2.for(i=1;i<=NF;i++)

NF:當前記錄中的字段數
$0:完整的輸入記錄
因為linux awk命令中的$0表示完整的輸入記錄,所以字段數從1開始計算。
上面的for循環意味著從1循環到NF。

3. if($i == "google") {print "NF=" i ", this is a refer"}

$i:表示第i個字段的值
這裡檢查哪個字段的值是“google”,如果字段值是google,則輸出字符串。

4. else { print $i}

如果字段值不是“google”,則輸出其值。

OK,已經瞭解上述命令。

但是,在某些情況下,我們還需要使用awk來處理某些數組。

我們如何做到這一點呢?

linux awk for 循環處理數組

➜ awk 'BEGIN{
 a["k-my"] = "my";
 a["k-name"] = "name";
 a["k-is"] = "is";
 a["k-ylspirit"] = "ylsprit";
 for(i in a) {
 print i, ": " a[i]
 }
}'
Linux awk 系列文章之 awk 循環:for 和 while 示例

for(i in a)
i:表示數組a的關鍵
a [i]:表示數組a的值

下面我們來看看如何編寫 awk while 循環命令?

linux awk while循環

➜ awk -F"#" '{
 i = 0;
 while(i<=NF) { 
 print i ": "$i;
 i++;
 }
}' test-2.txt
Linux awk 系列文章之 awk 循環:for 和 while 示例

Linux awk while循環
i從0開始,每次遞增1,直到i等於NF退出循環的字段數。

OK,關於awk for 循環和while 循環就講到這裡。

更多關於awk文章:

Linux awk 系列文章之 awk 基礎語法語法及工作流

Linux awk 系列文章之 awk if, if else, if else if else 示例


分享到:


相關文章: