
与上一节中的printf一样,awk循环判断语法与C语言循环判断非常相似.
1,While循环
#!/bin/sh
awk '
BEGIN {
ORS=""
}
{
i=0
while (i < NF) {
printf("* ")
i++
}
print "\n"
}
' group_file1
首先,将输出记录分隔符ORS设置为“”(空),这将导致print语句在每次调用结束时不输出新行. 这意味着,如果您希望任何文本以新行开头,则需要显式编写print“ \ n”.
在代码中,将变量i设置为存储当前处理字段编号. 对于每行记录,首先将i设置为0,然后为每个字段打印一个“ *”,并在打印每行记录后打印一个新行. 由于ORS设置为“”,因此打印不会输出2个换行符. 以下是打印结果:

#./7_awk_while.sh
* * *
* * *
* * *
* * * *
* * *
#
2,执行…while循环
awk还有一个“ do ... while”循环,它在代码块的末尾评估条件,而不是像标准的while循环那样在开始时评估条件.
示例(输出六个*符号):
#!/bin/sh
echo "" | awk '
{
i=0
do {
printf("* ")
}while (i++ < 5)
printf("\n")
}'

与普通的while循环不同,因为条件是在代码块之后求值的,所以“ do ... while”循环始终至少执行一次.
换句话说,当第一次遇到普通的while循环时awk数组下标,如果条件为false,则永远不会执行循环.
3,用于循环
awk允许创建循环. 就像while循环一样,它也等效于C语言的循环:
for ( initial assignment; comparison; increment ) {
code block
}

示例(也输出连续5个*):
#!/bin/sh
echo"" | awk '
{
for (i=0; i<5; i++) {
printf("* ")
}
printf("\n")
}'
如果您使用过C语言,您会发现Awk的循环操作和C语言的循环操作语法非常相似.
Awk还支持数组. 在使用数组之前awk数组下标,无需定义数组或指定数组元素的数量. 循环通常用于访问数组. 以下是循环类型的基本结构:
对于(元素数组)打印数组[元素]

示例:
#!/bin/sh
echo"" | awk '
BEGIN {
a[1]="123"
a[2]="456"
a[3]="789"
}
END{
for(i in a) {
print a[i]
}
}'
Awk数组下标也可以使用字符串. awk将arr [“ 1”]和arr [1]视为同一元素.
示例:
#!/bin/sh
echo"" | awk '
BEGIN {
a[1]="123"
a[2]="456"
a[3]="789"
a["hello"]="awk"
a["3"]="world"
}
{
for(i in a) {
print a[i]
}
}
END {
print "======end========"
print a[3]
print a["3"]
}
'
输出为:
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-269934-1.html
假已请好
配上mv歌更好听