Shell文本过滤编程(六): Awk循环判断和数组

电脑杂谈  发布时间:2020-07-06 01:03:53  来源:网络整理

awk数组下标_数组下标_vb 数组下标

与上一节中的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个换行符. 以下是打印结果:

vb 数组下标_awk数组下标_数组下标

#./7_awk_while.sh
* * * 
* * * 
* * * 
* * * * 
* * * 
#

2,执行…while循环

awk还有一个“ do ... while”循环,它在代码块的末尾评估条件,而不是像标准的while循环那样在开始时评估条件.

示例(输出六个*符号):

#!/bin/sh
 
echo "" | awk '
{
    i=0
    do {
        printf("* ")
    }while (i++ < 5)
    printf("\n")
}'

vb 数组下标_awk数组下标_数组下标

与普通的while循环不同,因为条件是在代码块之后求值的,所以“ do ... while”循环始终至少执行一次.

换句话说,当第一次遇到普通的while循环时awk数组下标,如果条件为false,则永远不会执行循环.

3,用于循环

awk允许创建循环. 就像while循环一样,它也等效于C语言的循环:

for ( initial assignment; comparison; increment ) {
 code block
}

vb 数组下标_awk数组下标_数组下标

示例(也输出连续5个*):

#!/bin/sh
 
echo"" | awk '
{
    for (i=0; i<5; i++) {
        printf("* ")
    }
    printf("\n")
}'

如果您使用过C语言,您会发现Awk的循环操作和C语言的循环操作语法非常相似.

Awk还支持数组. 在使用数组之前awk数组下标,无需定义数组或指定数组元素的数量. 循环通常用于访问数组. 以下是循环类型的基本结构:

对于(元素数组)打印数组[元素]

vb 数组下标_数组下标_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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...