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

原文地址:http://blog.51cto.com/babyshen/2173134

时间: 2024-11-03 01:33:24

awk中next和getline的区别的相关文章

linux awk 中 RS,ORS,FS,OFS 区别与联系【转】

linux awk 中 RS,ORS,FS,OFS 区别与联系 http://blog.csdn.net/jesseen/article/details/7992929

awk中NR和FNR的区别

NR  The total number of input records seen so far. FNR The input record number in the current input file. 简单翻译: NR  表示读到的文件行数 FNR 表示读到的当前文件行数 awk中NR和FNR的区别

在awk中通过system调用sql语句来说明引号的使用

一个实际应用例子: 在awk中,通过system调用连接数据库并作select操作,select语句中where条件来自于一个文件(file)的第一个域($1). $ cat file ... 1001 1002 1003 1004 ... 1. 用awk实现: awk '{system("mysql -u root -proot mydatabase -Bse \"select id,name from tables where id=""\047"$1

LINUX - awk命令之NF和$NF区别 (转)

NF和$NF 区别问答:(转)1.awk中$NF是什么意思?#pwd/usr/local/etc~# echo $PWD | awk -F/ '{print $NF}'etcNF代表:浏览记录的域的个数$NF代表:最后一个Field(列) 2.awk下面的变量NF和$NF有什么区别?{print NF} 也有{print $NF}前者是输出了域个数,后者是输出最后一个字段的内容如:~# echo $PWD | awk -F/ '{print $NF}' LINUX - awk命令之NF和$NF区

C++获取字符cin,getchar,get,getline的区别

原创作品,转载请注明来源:http://www.cnblogs.com/shrimp-can/p/5241544.html 1.cin>> 1)最常见的是获取输入的一个字符或数字,如 int a,b; cin>>a>>b: 注意:cin>>会自动过滤掉不可见字符(如空格 回车 tab等).若不想过滤掉空白字符,可以用noskipws流进行控制. 如下程序,没有过滤掉不可见字符,输入的空格字符存入了input[1]中,也可输出. 2)获取输入的字符串,可以用数

awk中的模式匹配

awk中的模式匹配在awk程序命令中非常重要,它决定着被处理数据文件中到底哪一行需要处理,并且做出什么样的处理. 首先,我们先看awk命令的基本语法:awk pattern { actions }   注意:pattern就是指的匹配模式,大括号外加两端空格的是处理动作. 上面awk后面的匹配模式和处理行为至少得有一个,不能两个同时缺失.例如,上篇博文中awk { print }   就表示只做输出到屏幕的处理动作,由于没有匹配模式,那么所有行都需要被输出. 实际上,我们在使用awk的时候,大部

LINUX - awk命令之NF和$NF区别

NF和$NF 区别问答:1.awk中$NF是什么意思?#pwd/usr/local/etc~# echo $PWD | awk -F/ '{print $NF}'etcNF代表:浏览记录的域的个数$NF代表:最后一个Field(列) 2.awk下面的变量NF和$NF有什么区别?{print NF} 也有{print $NF}前者是输出了域个数,后者是输出最后一个字段的内容如:~# echo $PWD | awk -F/ '{print $NF}'

awk中使用shell变量

其实在awk里,是不能直接使用shell变量的 方法是:awk -v 选项让awk 里使用shell变量 TIME=60 awk -v time="$TIME" 'BEGIN{FS="|"} {if ($7>time) print $2 }' 这样要注意:在awk里,time不能加$符号. 网上说如下方法都可行: 一:"'$var'" 这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法.如: var="test&quo

【翻译】JAVA中抽象类和接口的区别

不知道有没有人翻译过了,这篇是挺简单的,权当复习一遍内容吧. 很多常见的面试问题如"抽象类和接口有什么区别","你在什么时候用抽象类什么时候用接口".所以在这篇文章里面,我们会讨论一下这个话题. 在开始讨论它们的区别之前,我们先看看它们的介绍. Abstract class 抽象类 抽象类被用来抽象出子类的共同特征.它是不能被实例化的,它只能被子类继承作为超类使用.抽象类被用作它的子类下的层次结构创建模板(Abstract classes are used to c