shell文本过滤编程(六):awk之循环判断及数组

【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】

与上一节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 设置成 "",print将不输出2个换行。下面为打印结果:

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

2、 do…while循环

awk 还有"do...while" 循环,它在代码块结尾处对条件求值,而不象标准 while 循环那样在开始处求值。

示例(输出六个*号):

#!/bin/sh

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

与一般的 while 循环不同,由于在代码块之后对条件求值,"do...while" 循环永远都至少执行一次。

换句话说,当第一次遇到普通 while 循环时,如果条件为假,将永远不执行该循环。

3、 for循环

awk 允许创建 for 循环,它就象 while 循环,也等同于 C 语言的 for 循环:

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也支持数组,数组使用前,不必定义,也不必指定数组元素个数。经常使用循环来访问数组。下面是一种循环类型的基本结构:

For (element inarray ) print array[element]

示例:

#!/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"]
}
'

输出结果为:

awk
123
456
world
======end========
world
world
时间: 2024-08-10 21:29:45

shell文本过滤编程(六):awk之循环判断及数组的相关文章

shell文本过滤编程(二):awk之基础

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 上一节说到了grep命令,grep命令主要用在获取符合规则的行信息.本节要讲的awk在对某文件或字符串中获取指定文本域有较强大的功能. a w k语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息. a w k抽取信息后,才能进行其他文本操作.完整的 a w k脚本通常用来格式化文本文件中的信息. 在命令行上调用awk命令式最常用的使用awk的方式:

shell文本过滤编程(三):awk之条件判断

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 在之前grep章节中用到很多正则表达式,这一节将在awk条件操作中使用正则表达式.awk 允许使用正则表达式,根据正则表达式是否匹配当前行来选择执行独立代码块. 下面先给出awk的条件操作符: <       小于 <=    小于等于 ==   等于 !=     不等于 >     大于 >=    大于等于 ~     匹配正则表达式 !~ 

shell文本过滤编程(八):awk之内置函数

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 这一节来见识一下a w k许多强大的字符串函数及其使用方法. 1. sub 和 gsub函数: 用法:sub( Ere, Repl, [ str ] ) gsub( Ere, Repl, [ str ] ) 在第三个参数给出字符串中查找满足Ere 参数指定的扩展正则表达式的字符串,并使用第二个参数替换之.如果未指定 In 参数,缺省值是整个记录($0 记录变量)

shell文本过滤编程(七):awk之变量传递

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 由于awk经常在shell脚本中使用,所以shell脚本中的有些变量要传递到awk中使用,这一节就说一下awk引用shell中的变量方法. 为避免屏幕输出太多东西,我们先将被操作文件该为一行,如下: # catgroup_file3 vboxusers:x:984:allen 1. 文件名之前传递变量. 格式如下:awk '{print var1, var2}'

shell文本过滤编程(四):awk内置变量及一般变量

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] awk有许多内置变量用来设置环境信息.这些变量可以被改变.下面是awk内置变量: ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME  a w k浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行 - F选项 NF 浏览记录的域个数 NR 已读的记录数 OFS 输出域分隔符

shell文本过滤编程(五):awk之printf

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 在大多数情况下 awk 的 print 语句可以完成任务,但有时我们还需要更多.在那些情况下,awk 提供了两个我们熟知的函数 printf() 和 sprintf().是的,如同其它许多 awk 部件一样,这些函数等同于相应的 C 语言函数.printf() 会将格式化字符串打印到 stdout,而 sprintf()函数返回根据printf格式说明指定的格式

shell文本过滤编程(一):grep和正则表达式

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] Linux系统中有很多文件,比如配置文件.日志文件.用户文件等.文件中都包含了大量的信息,我们可以使用cat等命令轻松将其输出到屏幕,但如果要从文件中分析或提取数据,还需要其他工具来实现.而linux正好提供了这些工具:grep.awk.sed等.把这些工具使用好,可以极大地提高你的工作效率,对系统管理员分析数据有极大帮助,而对linux开发人员来说也可以在开发

shell文本过滤编程(一):grep和正則表達式

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] Linux系统中有非常多文件,比方配置文件.日志文件.用户文件等.文件里都包括了大量的信息,我们能够使用cat等命令轻松将其输出到屏幕,但假设要从文件里分析或提取数据,还须要其它工具来实现.而linux正好提供了这些工具:grep.awk.sed等.把这些工具使用好,能够极大地提高你的工作效率,对系统管理员分析数据有极大帮助,而对linux开发者来说也能够在开发

shell脚本编程学习笔记-while循环

1.当型循环和直到型循环 While使用的不多,一般守护进程程序或始终循环执行会用,其他循环运算都用for代替. 1.1 当型和直到型循环语法 (1)while条件语句 语法: While 条件 do 指令-. done 手机充值:发短信扣费,充值100,每次扣1角5,当费用低于1角5分就不能发了. (2)until条件语句 语法: until 条件 do 指令- Done 提示:只循环一次,应用场景不多,了解就好. 1.2 当型和直到型循环基本范例 休息命令:sleep休息1秒,usleep1