awk中next和getline的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk中next和getline的区别相关的知识,希望对你有一定的参考价值。

先看下面的几行代码

[[email protected] ~]# cat a
1 2
3 4
5 6
7 8
[[email protected]  ~]# awk ‘{print "$1="$1;getline;print "$2="$2}‘ a
$1=1
$2=4
$1=5
$2=8
[[email protected]  ~]# awk ‘{print "$1="$1;next;print "$2="$2}‘ a           
$1=1
$1=3
$1=5
$1=7
 getline是读入下一行,当读取新行后,getline将它赋给$0并将它分解成字段。同时设置系统变量NF,NR,和FNR。因此新行变成当前行,这时可以引用$1并检索第一个字段,引用$2并检索第二个字段。注意前面的行不再看做是变量$0。

而nex就是结束当前行,读取下一行并从第一个规则开始执行脚本。此时下一行还没读入,等待awk自己去读入下一行,这就是getline和next的区别,表面看起来似乎都是读入下一行,其实next不是。

man awk 解释为

getline               Set $0 from next input record; set NF, NR, FNR.
next                  Stop processing the current input record.  The next input record is read and processing starts over with the first pattern in the AWK program.  If the end of the input data is reached, the END block(s), if any, are executed.
[[email protected] ~]# cat b
1 2
3 4
5 6
[[email protected] ~]# awk ‘{print "$1="$1;getline;print "$2="$2}‘ b
$1=1
$2=4
$1=5
$2=6
这个比较特殊,因为getline失败了,所以$2还是第三行的

[[email protected]  ~]# awk ‘{print "$1="$1;next;print "$2="$2}‘ b
$1=1
$1=3
$1=5

以上是关于awk中next和getline的区别的主要内容,如果未能解决你的问题,请参考以下文章

awk从入门到入土(11)awk getline函数详解

使用 awk getline bash 在指定的时间范围内从日志文件中提取数据

如何在 getline 管道中获取命令的退出状态?

getline数据来源你的三种方式

getline()和get()的使用区别

awk=================awk 中的next ,exit 和 数组