next和getline
next语句从输入文件中读取下一行,然后从头开始执行awk脚本。如:
{if ($1 ~/test/){next} else {print} }
getline从整体上来说,应这么理解它的用法:
当其左右无重定向符 | 或 < 时,getline作用于当前文件,读入当前文件的下一行给其后跟的变量var或$0(无变量);应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。
当其左右有重定向符 | 或 < 时,getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。
next和getline在awk执行过程中都用于读取下一行数据,但他们却有着很重要的不同。next读取下一行之后,把控制权交给了awk脚本的顶部,及next后面的语句将被忽略,重头执行那个awk的action,同时内置变量FNR等被重置。而getline却没有改变脚本的控制,读取下一行之后,继续运行当前的awk脚本,内置变量也不会被重置。getline执行之后,会覆盖$0的内容。
下面看看他们的具体用法和实际例子
next
$ cat file1
a 1
a 1
b 2
c 3
d 4
a 1
$ awk '{print $0;next}' file1
a 1
a 1
b 2
c 3
d 4
a 1
$ awk '{next;print $0}' file1
$ awk '{if($1~/a/)print $0;next} /b/{print $0}' file1
a 1
a 1
a 1
$ awk '{if($1~/a/)print $0;next;if($1~/b/);print $0} /b/{print $0}' file1
a 1
a 1
a 1
$ awk '{if($1~/a/)print $0;next;if($1~/b/) print $0} /b/{print $0}' file1
a 1
a 1
a 1
可以看到next后面的命令都没有执行,awk执行返回了命令顶部,读取下一行数据执行相应action
getline
$ awk '{getline;print $0,NR} ' file1
a 1 2
c 3 4
a 1 6
$ awk '{print $0,NR;getline} ' file1
a 1 1
b 2 3
d 4 5$ awk '{getline;print $0,NR;getline} ' file1
a 1 2
d 4 5
隔行处理数据
$ awk '{print $0,NR;getline} {print $0,NR}' file1
a 1 1
a 1 2
b 2 3
c 3 4
d 4 5
a 1 6
上里的操作顺序如下
'{print $0,NR}' file1------>getline------->{print $0,NR}------->'{print $0,NR}' file1
可以看到getline的操作是读取下一行数据到内存中
exit
在 awk中exit的执行有两种情况:当exit语句不在 END中时,任何操作中的exit命令表现得如同到了文件尾,所有模式或操作执行将停止,END模式中的操作被执行。而出现在END中的exit将导致程序终止。退出状态为0代表成功,非零值表示出错。
$ awk '{if ($2>3 && $2<5) exit;else print $0,NR}' file1
a 1 1
a 1 2
b 2 3
c 3 4
参考至:http://www.chinaunix.net/old_jh/24/691456.html
http://man.lupaworld.com/content/manage/ringkee/awk.htm
http://www.cnblogs.com/chengmo/archive/2010/10/04/1842073.html
http://www.51osos.com/a/Linux_CentOS_RedHat/Shellbiancheng/2010/1124/awk-getline.html
http://bbs.linuxpk.com/thread-43657-1-1.html
本文原创,转载请注明出处、作者
如有错误,欢迎指正
邮箱:czmcj@163.com
相关推荐
- **脚本编程**: Shell 不仅支持命令的直接执行,还可以用于编写脚本文件,这些脚本文件包含了按顺序执行的一系列命令。 **1.3 主要 Shell 命令** - `who`: 显示当前登录系统的用户。 - `mv`: 移动文件或目录,也...
Linux Shell是Linux操作系统中的一种命令解释器,它允许用户通过命令行界面与系统进行交互,执行各种任务。在学习Shell的过程中,了解其基本概念、常用命令及其应用是至关重要的。 首先,Shell脚本是由一系列系统...
具体权限相当于三种权限的数相加,如7=1+2+4,即拥有读写和执行权。 另外,临时文件/目录的权限为rwt,可写却不可删,关机后自动删除;建临时目录:chmod 777 目录名,再chmod +t 目录名。 id 显示用户有效的uid...
Linux Shell编程是Linux系统中的一种强大工具,它允许用户通过命令行界面来执行各种操作,编写脚本,自动化任务,并与系统进行交互。对于初学者来说,掌握Shell编程不仅可以提高工作效率,也是深入理解Linux系统运作...
Shell脚本本质上是一系列命令的集合,这些命令按照特定顺序执行,能够提高工作效率,实现批处理和任务自动化。 在shell编程中,我们首先会接触到基本的命令行操作,例如: 1. **目录操作**:`cd`用于切换当前工作...
### Linux学习笔记知识点详解 #### 文件与目录管理 1. **`ls -ld` 查看当前目录属性** `ls -ld` 命令用于显示当前工作目录的详细信息,包括文件类型、权限、链接数、拥有者、组、大小及最后修改时间等。 2. **`...
2. **笔记或文章**:Yisong可能按照主题或时间顺序组织了他的笔记,如设计模式、版本控制、测试策略、性能优化、故障排查等内容。 3. **Shell脚本**:实际的Shell脚本文件,可能用于演示如何自动化某些任务,或者...