第八章 条件,循环和数组
awk中的条件与循环结构是借鉴于c语言的.
条件语句
if (expression)
action1
[else
action2]
if (x) print x #测试x是否是非0值
if(x==y) print x #测试x是否等于y
if(x~/[yY]|es?/) print x #判断x是否与一个模式匹配
if(x~/^[yY]$|^[yY]es$/) print x #判断x是否是单独的y,Y,yes或Yes
#如果操作是多条语句,要用大括号括起来,awk对大括号和语句位置没有特殊要求(和sed不同),用分号可代替回车,与java也有点像.
#以下三种情况都可以,不过第一种可增加可读性
if(expression){
statement1
statement2
}
if(expression) action1
[else action2]
if(expression) action1;[else action2]
条件操作符
expr?action1:action2
?:操作符可以嵌套使用,这样会导致程序不易读.为了清晰,可以将条件括起来,如下:如果ave大于60则通过
grade = (ave>=60)?"Pass":"Fail"
循环
while循环
while(expression)
action
do循环
do
action
while(expression)
for循环
for(set_counter;test_counter;increment_counter)
action
for (i=1;i<=NF;i++) print $i #用于打印出每一个输入行的每个字段
for (i=NF;i>=1;i--) print $i #从最后一个字段到第一个字段反向打印
求阶乘
fact=number
for(x=number-1;x>1;x--)
fact*=x
或
fact=number;for(--number;number>1;number--) fact*=number;print fact
影响控制的其他语句
continue:结束当前循环,继续下一次循环
break:退出循环,继续下面的命令
next:能导致读入下一行,并返回到脚本的顶部
exit:退出循环,并将控制移到END规则
数组
array[subscript] = value
#数组不需要指明大小,只需要指明标识符,下面是为名为hello的数组的第[1]个元素赋值"world"
hello[1]="world"
#打印hello的数组的第[1]个元素
print hello[1]
关联数组
可以使用一个字符串作为数组的下标
arr["TEST"]
arr[$1]=$2
访问关联数组的所有元素,variable为一个随意变量名,array为数组名,但这个访问数组是随机的
for(variable in array[])
do something with array[variable]
#下面例子用于打印下标名和内容
for(item in acro)
print item,acro[item]
测试数组中的成员资格
in也是一个操作符,用于测试下标是否是数组成员
item in array #如果array[item]存在则返回1,否则返回0
用split()创建数组
内置函数split()能够将任何字符串分解到数组的元素中.
其实split()的作用就是可以更细化输入项,可以把各个输入域再通过分隔符分隔成更小块
n = split(string,array,separator)
string:要被分解的输入字符串
array:指定的数组.数组的下标从1开始到n,n即为数组中元素的个数.
separator:分解元素的分隔符.如果没指定则用默认的FS.它可以是个正则表达式,不仅仅只是一个单个字符.
#以下为对文件name_list的处理,文件名字以空格分隔,名字与号码之间以tab键分隔
$ cat name_list
Tim Duncan 21
Jason Kidd 5
Kevin Garnett 21
#输入域分隔符是tab键,split()函数分隔符是空格,z为数组包含元素的个数
$ cat name_list | awk 'BEGIN{FS="\t"}{z=split($1,fullname," ");print z,fullname[1],fullname[2]}'
2 Tim Duncan
2 Jason Kidd
2 Kevin Garnett
#输入域分隔符是tab键,split()函数分隔符没有指定,则默认为FS,也为tab键
$ cat name_list | awk 'BEGIN{FS="\t"}{z=split($1,fullname);print z,fullname[1],fullname[2]}'
1 Tim Duncan
1 Jason Kidd
1 Kevin Garnett
#输入域分隔符是逗号,文件中没有逗号,所以每行只有一个域.split()函数分隔符为tab键,所以数组的第二个元素是号码.
$ cat name_list | awk 'BEGIN{FS=","}{z=split($1,fullname,"\t");print fullname[2]}'
21
5
21
删除数组元素
将数组中下标为subscript的元素删除
delete array[subscript]
多维数组
array[m,n] #m行n列
awk不支持多为数组,但可以用语法来模拟引用多维数组.
file_array[NR,i] = $1
file_array[2,4] #表示第二行记录的第四个字段值
作为系统变量的数组
ARGV:命令行参数的数组,不包括脚本本身和任何调用awk指定的选项.元素个数可以从ARGC获得.第一个元素下标为0,最后一个下标是ARGC-1.
$ echo a | awk '{for (x in ARGV) print x,":",ARGV[x]} END{print ARGC}' m=1 #打印出命令行参数所有值ARGV,和个数ARGC
ENVIRON:环境变量数组.每个元素是当前环境变量的值,其下标是环境变量的名字.
$ echo a | awk '{for (x in ENVIRON) print x,":",ENVIRON[x]}' #打印当前系统环境变量值
修改ENVIRON数组中的元素不会修改环境变量.下例执行后HOSTNAME在shell环境中的值不会改变.
ENVIRON[HOSTNAME]="SPURS"
分享到:
相关推荐
- **引用数组元素、使用循环遍历awk数组、删除数组元素、多维数组、SUBSEP下标分隔符、用asort为数组排序、用asorti为索引排序**:Awk的关联数组是处理文本数据的强大工具,它允许使用任意字符串作为数组的索引。...
"Sed-and-Awk-101-Hacks"可能涵盖awk的基础知识,如字段分隔符、模式匹配、条件判断、循环和函数。通过awk,你可以方便地处理CSV文件,进行数据分析,甚至实现简单的脚本任务。 4. Linux-101-hacks:Linux操作系统...
《Sed与Awk》是IT领域中关于文本处理的经典之作,主要讲解了两种强大的命令行工具:Sed(流编辑器)和Awk(数据处理语言)。这两款工具在Linux和Unix系统中广泛使用,尤其适用于数据提取、转换、报告生成等任务。 ...
本书是sed与awk的第二版,由O'Reilly & Associates出版,并授权给机械工业出版社在中国发行。书中提及的ISBN7-111-11527-9为本书的标识。第一版由Dougherty和Robbins著,张旭东等人翻译,机械工业出版社出版于2003年...
The book begins with an overview and a tutorial that demonstrate a progression in functionality from grep to sed to awk. sed and awk share a similar command-line syntax, accepting user instructions in...
English 2nd Edition 2002 chm format Summary of sed & awk
《SED与AWK 高清第三版》是一本专注于Linux系统中强大文本处理工具sed和awk的教程。在Linux环境中,sed和awk是不可或缺的工具,它们能够高效地处理大量文本数据,进行搜索、替换、格式化等操作,极大地提高了运维...
sed与awk(第二版)学习笔记
Sed与awk(第二版)这本书作为国外的经典教材,经过翻译后,为中文读者学习这些工具提供了极大的便利。它不仅系统地介绍了sed和awk的使用方法,还通过实例演示了如何编写有效的脚本来处理文本数据。对于那些希望提高...
第七章介绍了sed的多行命令和循环,这些高级技巧在处理跨多行的数据时非常有用,例如将下一行追加到模式空间(AppendNextLinetoPatternSpace)。 由于文档中存在OCR扫描误差,部分内容可能无法完全通顺。但是根据上...
根据提供的文件信息,我们可以从《Sed与awk第二版(高清版).pdf》这一资源中提炼出关于Sed和awk这两个强大的文本处理工具的相关知识点。虽然免责声明部分并未提供具体的技术内容,但我们可以通过书籍的标题、描述及...
包括: 1. sed与awk+第三版(中文高清晰),内容非常全面详细,看了觉得很不错,学习sed和awk的必备书籍。 2. Effective awk Programming, 4th Edition 3. Sed与awk第二版(高清版).pdf
《Sed与Awk第二版》是一本深入探讨文本处理工具Sed和Awk的经典教程。这本书以高清的形式呈现,旨在帮助读者更好地理解和掌握这两种强大的命令行工具。Sed(Stream Editor)和Awk(Aho-Wedderburn-Kernighan)在Linux...
第八章:讲解了在awk脚本中使用条件语句、循环和数组进行更复杂的数据操作。 第九章:探讨awk中的函数,包括内置函数和自定义函数的使用。 第十章:称为“百宝箱”,收集了一些实用的技巧和解决方案。 第十一章:...