awk中next以及getline用法示例
在awk中,如果调用next,那么next之后的命令就都不执行了。此行文本的处理到此结束,开始读取下一条记录并操作。
实例如下:
- zoer@ubuntu:~$ cat data
- 1000
- naughty 500
- cc 400
- zoer 100
- zoer@ubuntu:~$ awk '{if(NR==1){next} print $1,$2}' data
- naughty 500
- cc 400
- zoer 100
比如说我们有一个data文件,存放了每个人的出差费用。想要打印出来。但是第一行总费用不要打印。那么使用awk的next忽略掉第一行即可。
-------------------------------------------------------------
与next相似,getline也是读取下一行数据。但是与next不同的是,next读取下一行之后,把控制权交给了awk脚本的顶部。但是getline却没有改变脚本的控制,读取下一行之后,继续运行当前的awk脚本。getline执行之后,会覆盖$0的内容。
例子如下:
- zoer@ubuntu:~$ cat data
- name naughty
- 25 shandong
- age 14
- hah,here is test
- zoer@ubuntu:~$ cat d
- $1=="name"{print $0;getline;print $0;}
- $1=="age"{print $0}
- zoer@ubuntu:~$ awk -f d data
- name naughty
- 25 shandong
- age 14
例子中,如果遇到行首是name的,就把下一行读取出来并打印。如果行首是age,就仅仅打印本行。
从运行结果也可以看出来,hah,here is test并没有打印出来。因为它没有匹配name或者age开头。
---------------------------------------------------------------
除了读取本文间的 下一行,getline还能够读取其他文件。
下面例子中,每次读取一行data文件,就读取testdata文件并打印出来。【这个功能可以使用sed的r命令来实现,参考这里】
【存在疑问】
zoer@ubuntu:~$ awk '{print $0;while((getline<"testdata")>0)print $0;}' data
test line 1
1
2
test line 2
test line 3
zoer@ubuntu:~$ cat data
test line 1
test line 2
test line 3
zoer@ubuntu:~$ cat testdata
1
2
帮忙看下这个awk的使用,我想每次从data读取一行打印出来,然后读取testdata的全部打印出来。
然后重复这个过程。请问,为什么testdata的内容只打印了一次??
这里是因为,getline函数,读取testdata文件的时候,处理data文件第一行的时候,testdata文件的文件指针就指向文件末尾了。以后每处理一行data文件,getline函数的返回值都是0。所以不再输出testdata文件的内容。
awk中next以及getline用法示例的更多相关文章
- shell中字典的一个用法示例
1. shell中字典的用法示例, 数组用法同字典 2. 以上使用sell配合字典实现的功能, 使用awk能轻松搞定, 如下: awk '{print $2}' file.txt | sort | u ...
- C#中this指针的用法示例
这篇文章主要介绍了C#中this指针的用法,对初学者而言是非常重要的概念,必须加以熟练掌握,需要的朋友可以参考下. 本文实例展示了C#中this指针的用法,对于初学者进一步牢固掌握C#有很大帮助,具体 ...
- js中setTimeout/setInterval定时器用法示例
js中setTimeout(定时执行一次)和setInterval(间隔循环执行)用法介绍. setTimeout:在指定的毫秒数后调用指定的代码段或函数:setTimeout示例代码 functio ...
- Objective-C中NSArray的基本用法示例
NSArray的一些用法 NSArray只允许装OC对象,并且不能装空值,空代表数组元素的结束 #pragma mark - NSArray的基本用法 // 创建一个空数组 NSArray *arra ...
- LINQ中的连接(join)用法示例
Linq中连接主要有组连接.内连接.左外连接.交叉连接四种.各个用法如下. 1. 组连接 组连接是与分组查询是一样的.即根据分组得到结果. 如下例,根据publisther分组得到结果. 使用组连接的 ...
- Linux里AWK中split函数的用法
跟java里的split函数的用法是很相像的,举例如下: The awk function split(s,a,sep) splits a string s into an awk array a u ...
- JS中数组Array的用法示例介绍 (转)
new Array() new Array(len) new Array([item0,[item1,[item2,...]]] 使用数组对象的方法: var objArray=new Array() ...
- awk中split函数的用法
time='12:34:56' echo $time | awk '{split($0,a,":" ); print a[1]}' 12 echo $time | awk '{sp ...
- awk中的system和getline的用法
system只能对命令的输出结果输出到终端. getline在awk中可以使命令的输出结果传到一个变量中保存. # awk 'BEGIN{system("date")|getlin ...
随机推荐
- 74HC14D(6反向施密特触发器)
74HC14D:6反向施密特触发器:延迟特性,反向特性,整形特点. 施密特触发器是具有特殊功能的非门,当加在它的输入端A的电压逐渐上升到某个值时(正阈值电压),输出端Y会突然从高电平跳到低电平,而当输 ...
- 使用express+mongoDB搭建多人博客 学习(6)发表文章
发表文章 1.在modules文件夹下新建post.js var mongodb=require("./db"); function Post(name,title,post){ ...
- git(代码仓库)
第1章 git介绍 1.1 参数: 第2章 git管理一个项目 2.1 图示 2.2 cd /项目路径 2.3 git config --globle user.email "邮箱地址&q ...
- 下面给出了四种设计模式的作用: 外观(F
下面给出了四种设计模式的作用: 外观(Fa?ade :为子系统中的一组功能调用提供一个一致的接口,这个接口使得这一子系统更加容易使用: 装饰(Decorate):当不能采用生成子类的方法进行扩充时,动 ...
- P1816 忠诚 倍增
链接:https://www.luogu.org/problem/show?pid=1816 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k ...
- JS核心
JS核心 1.实例化对象 objectName = new objectType (param1 [,param2] ...[,paramN]) 参数 objectName 新对象实例的名称. ob ...
- Objective-C Protocols
Objective-C allows you to define protocols, which declare the methods expected to be used for a part ...
- Git 学习教程【转+总结】
之前是在用SVN,现在因为小伙伴比较喜欢Git,所以也开始学习Git,很感谢 时光穿梭机 - 廖雪峰 的无私奉献.本文用来记录我在学习Git过程中的收获和笔记,廖雪峰大神的Git教程参考这里. 1.G ...
- SQLServer同一实例下事务操作
参考代码: 引用Dapper public bool OrderAdd2(User user, Order order) { string dbString = ConfigurationManage ...
- 系统报错undefine not symbol armv7
libz.dylib libsqlite3.dylib libstdc++.dylib 添加这些动态链接库