回到: "Linux系列文章" "Shell系列文章" "Awk系列文章" break和continue break可退出for、while、do...while、switch語句。 continue可讓for、while、do...while進入下一輪迴圈。 next和nextfile next會 ...
回到:
break和continue
break可退出for、while、do...while、switch語句。
continue可讓for、while、do...while進入下一輪迴圈。
awk '
BEGIN{
for(i=0;i<10;i++){
if(i==5){
break
}
print(i)
}
# continue
for(i=0;i<10;i++){
if(i==5)continue
print(i)
}
}'
next和nextfile
next會在當前語句處立即停止後續操作,並讀取下一行,進入迴圈頂部。
例如,輸出除第3行外的所有行。
awk 'NR==3{next}{print}' a.txt
awk 'NR==3{getline}{print}' a.txt
nextfile會在當前語句處立即停止後續操作,並直接讀取下一個文件,併進入迴圈頂部。
例如,每個文件只輸出前2行:
awk 'FNR==3{nextfile}{print}' a.txt a.txt
exit
exit [exit_code]
直接退出awk程式。
註意,END語句塊也是exit操作的一部分,所以在BEGIN或main段中執行exit操作,也會執行END語句塊。
如果exit在END語句塊中執行,則立即退出。
所以,如果真的想直接退出整個awk,則可以先設置一個flag變數,然後在END語句塊的開頭檢查這個變數再exit。
BEGIN{
...code...
if(cond){
flag=1
exit
}
}
{}
END{
if(flag){
exit
}
...code...
}
awk '
BEGIN{print "begin";flag=1;exit}
{}
END{if(flag){exit};print "end2"}
'
exit可以指定退出狀態碼,如果觸發了兩次exit操作,即BEGIN或main中的exit觸發了END中的exit,且END中的exit沒有指定退出狀態碼時,則採取前一個退出狀態碼。
$ awk 'BEGIN{flag=1;exit 2}{}END{if(flag){exit 1}}'
$ echo $?
1
$ awk 'BEGIN{flag=1;exit 2}{}END{if(flag){exit}}'
$ echo $?
2