`

shell学习笔记3---awk的执行过程(原创)

 
阅读更多

awk_script的组成
1、awk_script可以由一条或多条awk_cmd组成,两条awk_cmd之间一般以NEWLINE分隔
2、awk_cmd由两部分组成: awk_pattern { actions }
3、awk_script可以被分成多行书写,必须确保整个awk_script被单引号括起来。
awk命令的一般形式
awk ' BEGIN { actions }
awk_pattern1 { actions }
............
awk_patternN { actions }
END { actions }
' inputfile
其中 BEGIN { actions } 和 END { actions } 是可选的。
awk的运行过程
1、如果BEGIN 区块存在,awk执行它指定的actions。
2、awk从输入文件中读取一行,称为一条输入记录。如果输入文件省略,将从标准输入读取
3、awk将读入的记录分割成字段,将第1个字段放入变量$1中,第2个字段放入$2,以此类推。$0表示整条记录。字段分隔符使用shell环境变量FS或由参数指定。
4、把当前输入记录(数据行)依次与每一个awk_cmd中awk_pattern比较,看是否匹配,如果相匹配,就执行对应的actions。如果不匹配,就跳过对应的actions,直到比较完所有的awk_cmd。
5、当一条输入记录比较了所有的awk_cmd后,awk读取输入的下一行,继续重复步骤3和4,这个过程一直持续,直到awk读取到文件尾。
6、当awk读完所有的输入行后,如果存在END,就执行相应的actions。
其中iput_file可以是多于一个文件的文件列表,awk将按顺序处理列表中的每个文件。awk会先对输入文件执行完所有的action后再处理下一个文件,看如下例子

$ cat file1
a 1
b 2
$ cat file2
d 4
c 3
$ awk '{print $0} {print $1}' file1 file2
a 1
a
b 2
b
d 4
d
c 3
c

另外有以下4点需要注意:
1、一条awk_cmd的awk_pattern可以省略,省略时不对输入记录进行匹配比较就执行相应的actions。一条awk_cmd的actions也可以省略,省略时默认的动作为打印当前输入记录(print $0) 。一条awk_cmd中的awk_pattern和actions不能同时省略。
2、BEGIN区块和END区块别位于awk_script的开头和结尾。awk_script中只有END区块或者只有BEGIN区块是被允许的。如果awk_script中只有BEGIN { actions } ,awk不会读取input_file。
3、awk把输入文件的数据读入内存,然后操作内存中的输入数据副本,awk不会修改输入文件的内容。
4、awk的总是输出到标准输出,如果想让awk输出到文件,可以使用重定向。
awk_pattern
awk_pattern模式部分决定actions动作部分何时触发及触发actions。awk_pattern可以是以下几种类型:
正则表达式用作awk_pattern: /regexp/
1、awk中正则表达式匹配操作中经常用到的字符:
^ $ . [] | () * // 通用的regexp元字符
+ : 匹配其前的单个字符一次以上,是awk自有的元字符,不适用于grep或sed等
? : 匹配其前的单个字符1次或0次,是awk自有的元字符,不适用于grep或sed等
2、举例:
awk '/ *$0.[0-9][0-9].*/' input_file
布尔表达式用作awk_pattern,表达式成立时,触发相应的actions执行。
1、表达式中可以使用变量(如字段变量$1,$2等)和/regexp/
2、布尔表达式中的操作符:
关系操作符: < > <= >= == !=
匹配操作符: value ~ /regexp/ 如果value匹配/regexp/,则返回真;value !~ /regexp/ 如果value不匹配/regexp/,则返回真
举例:

awk '$2 > 10 {print "ok"}' input_file
awk '$3 ~ /^d/ {print "ok"}' input_file
3、&&(与) 和 ||(或) 可以连接两个/regexp/或者布尔表达式,构成混合表达式。!(非) 可以用于布尔表达式或者/regexp/之前。
举例

awk '($1 < 10 ) && ($2 > 10) {print "ok"}' input_file
awk '/^d/ || /x$/ {print "ok"}' input_file
4、其它表达式用作awk_script,如赋值表达式等
eg:
awk '(tot+=$6); END{print "total points :" tot }' input_file     // 分号不能省略
awk 'tot+=$6 {print $0} END{print "total points :" tot }' input_file // 与上面等效
actions
actions就是对awk读取的记录数据进行的操作。actions由一条或多条语句或者命令组成,语句、命令之间用分号(;)分隔。actions中还可以使用流程控制结构的语句。
awk的命令:
1、print 参数列表 : print可以打印字符串(加双引号)、变量和表达式,是awk最基本的命令。参数列表要用逗号(,)分隔,如果参数间用空格分隔,打印出时参数值之间不会有空格。
2、printf ([格式控制符],参数) : 格式化打印命令(函数),语法与C语言的printf函数类似。
3、next : 强迫awk立刻停止处理当前的记录,而开始读取和处理下一条记录,改变脚本控制过程。
4、nextfile : 强迫awk立刻停止处理当前的输入文件而处理输入文件列表中的下一个文件
5、exit : 使awk停止执行而跳出。如果有END 存在,awk会去执行END 的actions。

6、getline:读取下一行数据,但不改变脚本控制过程。

关于exit,next和getline函数可以参见笔者的另一篇博客

http://czmmiao.iteye.com/blog/1885572

awk的语句: awk的语句主要是赋值语句,用来给变量赋值。
1、把直接值或一个变量值赋值给变量。如果直接值是字符串要加双引号。
举例

awk 'BEGIN {x=1 ; y=3 ; x=y ; print "x=" x " ; y=" y }'
2、把一个表达式的值赋值给变量。表达式一般是数值表达式,也可以是其它表达式。
数值表达式: num1 operator num2
operator可以是: +(加) -(减) *(乘) /(除) %(取模) ^(求幂)
当num1或者num2是字符串而是不是数字时,无论是否加有双引号,awk都视其值为0
条件选择表达式: A?B:C (A为布尔表达式,B和C可以是表达式或者直接值)
当布尔表达式A的值为真时,整个表达式的值为B,A的值为假时,整个表达式的值为C
举例

awk 'BEGIN {x=3 ; x+=2 ; y=x+2 ; print "x=" x " ; y=" y }'
awk 'BEGIN {x=3 ; y=x>4?"ok":4 ; print "x=" x " ; y=" y }'
3、为了方便书写,awk也支持C语言语法的赋值操作符: += -= *= /= %= ^= ++ --
流程控制结构
其中condition一般为布尔表达式,body和else-body是awk语句块。
1、if (condition) {then-body} [else {else-body}]
2、while (condition) {body}
3、do {body} while (condition)
4、for (initialization; condition; increment) {body}
与C语言的for结构的语法相同。
5、break : 跳出包含它的for、while、do-while 循环
6、continue : 跳过for、while、do-while循环的body的剩余部分,而立刻进行下一次循环的执行。

 

参考至:http://blog.chinaunix.net/uid-46353-id-2399597.html

                  http://blog.sina.com.cn/s/blog_6f02e1900100mmc5.html

本文原创,转载请注明出处、作者

如有错误,欢迎指正
邮箱:czmcj@163.com

0
4
分享到:
评论

相关推荐

    shell编程教程.chm

    awk基础入门(4) Unix系列shell程序编写(上) awk基础入门(5) Unix系列shell程序编写(下) Unix系列shell程序编写(中) shell游戏:俄罗斯方块 ...Shell学习笔记 一 ...Shell学习笔记 二 ...Shell学习笔记 五

    《UnixShell实例精解》-学习笔记.doc

    Unix Shell 实例精解学习笔记 本文档主要介绍 Unix Shell 的基础知识,涵盖了 Shell 的定义、主要功能、常见 Shell 命令、正则表达式的基础知识和应用。 一、Unix Shell 定义 Shell 是一种特殊的程序,被用作用户...

    Shell学习笔记总结

    本资源是 Shell 学习笔记的总结,涵盖了 Shell 的基本概念、类型、变量、进程、权限、管道、POSIX、grep、sed、awk 等命令和编程语言。 一、 Shell 的类型和特点 Shell 是一种命令行界面,提供了访问操作系统的...

    linux运维学习笔记:企业Shell面试题总结-1.pdf

    根据提供的文件信息,本文将总结其中的Linux运维学习笔记中提及的多个企业Shell面试题及其解决方案和知识点。 1. 批量生成随机字符文件名案例 该案例主要考察使用Shell脚本批量创建文件,并为每个文件赋予随机生成...

    Shell 学习笔记 word ppt

    Shell学习笔记主要涵盖的是在Unix/Linux环境中使用Shell脚本来进行自动化任务处理和系统管理的知识。Shell作为操作系统与用户交互的接口,提供了强大的命令行工具和脚本编程能力,是IT行业中不可或缺的基础技能之一...

    AWK学习笔记.doc

    本笔记主要涵盖了AWK的基础知识和高级特性,旨在帮助读者理解和掌握这一实用工具。 **一.1 什么是AWK?** AWK是由Aho、Weinberger和Kernighan三位计算机科学家开发的,它的名字就是由他们的姓氏首字母组成的。AWK是...

    unix编程之Unix Shell学习笔记

    ### Unix Shell 编程知识点概览 #### 一、Unix Shell 概述 ...通过以上知识点的学习,读者可以更好地理解和掌握 Unix Shell 编程的基本概念和技术细节,为深入学习 Unix Shell 脚本编程打下坚实的基础。

    AWK-学习笔记(共享)

    由于AWK不能直接执行系统命令,常与shell script结合,利用shell的功能来扩展AWK的能力。 13. **附录**: 通常附录会包含更多的例子、参考信息或函数详细说明,以供用户查阅和学习。 学习AWK需要熟悉其独特的...

    shell学习笔记.docx

    Shell编程是Linux操作系统中的一种命令解释器,它允许用户通过命令行与系统进行交互,执行各种操作。在《shell编程从入门到精通》一书中,作者张昊详细讲解了shell编程的基础知识。以下是对该书内容的部分总结: 1....

    Awk学习笔记和指南

    awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和 动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。...

    awk学习笔记(简单易学)

    ### awk学习笔记精要 #### 1. awk简介 awk是一种功能强大的文本处理语言,主要用于在Linux/Unix环境中处理文本和数据。它能够从标准输入、文件或其它命令的输出中提取并处理数据,支持自定义函数和动态正则表达式...

    Linux_shell编程学习笔记

    Linux Shell编程是Linux系统管理与自动化任务中的重要一环,主要通过编写脚本来实现对操作系统进行交互和控制。本文将详细解析Linux Shell编程中的几个关键概念:正则表达式、find命令、grep命令以及sed命令。 1. *...

    《Unix Shell 实例精解》学习笔记

    ### Unix Shell 实例精解 — 学习笔记关键知识点概览 #### 第一章:关于UNIX Shell的介绍 - **Shell定义**: - Shell是一种作为用户与内核(即UNIX操作系统的核心)之间的桥梁的特殊程序。 - 常见的Shell类型...

    awk学习使用笔记及举例

    ### awk学习使用笔记及举例 #### 1. awk简介 awk是一种专为文本处理而设计的编程语言,常用于Linux/Unix环境下。它可以处理来自标准输入、文件或其它命令输出的数据。awk支持用户自定义函数和动态正则表达式等功能...

    shell自研基础学习笔记

    总结,shell脚本学习涵盖了基础概念、变量管理、输入输出、条件控制、循环、函数、数组和正则表达式等核心内容,同时也涉及到了一些高级工具如grep、sed和awk的使用。这些知识点构成了shell编程的基础,对于Linux...

    《unix shell 实例精解》学习笔记

    通过上述内容,我们不仅了解了 Unix Shell 的基本概念和功能,还深入学习了正则表达式的应用方法。这些知识点对于掌握 Unix 操作系统的核心技能至关重要,有助于提高日常工作效率和解决问题的能力。

    linux unix shell 学习笔记 很全 很经典

    awk.sc2 datafile datafile2 employees employees2 lab5.data names passwd 解释:将把ls的输出送到getline。对于每次循环,getline都从 ls读取一个以上输出,然后打印到屏幕上 .. 举例3: $ ...

    Unix+shell+实例精解 学习笔记

    《Unix Shell 实例精解》是一本专注于Unix操作系统与Shell编程的学习笔记,它以其丰富的实战案例为亮点,帮助读者深入理解和掌握Unix环境下的命令行操作与脚本编程技巧。Unix Shell是Unix系统中的一个交互式命令解释...

    sed awk学习

    sed awk 学习笔记 SED 是一个“非交互式”的面向字符流的编辑器,它可以在一个地方指定所有的编辑指令,然后通过文件传递一次来执行他们。但是它在每次多于一行的处理能力方面有限制。SED 的优点是可以批量处理文件...

Global site tag (gtag.js) - Google Analytics