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 ...
随机推荐
- 安装好的php独立添加扩展模块
在装好php后,或者在使用php的时候,发现某个模块没有添加,而又不想重新编译安装,这时就需要单独添加扩展模块. php环境说明: 安装路径:/data/php5.6/ 解压路径:/data/php- ...
- STM32F4之SWO
https://stm32f4-discovery.net/2014/12/library-46-debug-stm32f4-device-swo-feature/
- vue 引用其他组件
1.在components 目录下新建Test.vue 文件 <template> <div class="test"> <h1>{{ msg ...
- mint-ui pull down不起作用及解决方案
<template> <div style="min-height:200px"> <mt-loadmore :top-method="lo ...
- mongodb 文本索引
启用文本搜索: 最初文本搜索是一个实验性功能,但2.6版本开始,配置是默认启用的.但是,如果使用的是以前 MongoDB 的版本,那么必须启用文本搜索,使用下面的代码: >db.adminCom ...
- System.TypeInitializationException: 'The type initializer for 'MySql.Data.MySqlClient.Replication.ReplicationManager' threw an exception.'
下午在调试的时候报错数据库连接就报错我就很纳闷后面用原来的代码写发现还是报错 System.TypeInitializationException: 'The type initializer for ...
- ftpclient 遇到的一些问题
1. FTPFile[] files=ftpClient.listFiles(ftpDirectory); 没有数据 public static boolean ftpLogin(String ser ...
- html页面编码问题
今天在项目中碰到需要把已经编码的html页面通过mvc controller返回到前端页面,已编码的html页面包含类似下面的内容: <div style="line-height: ...
- CSS的相对定位和绝对定位
relative的意思就是相对自己的一开始的位置进行的定位.如图: 但是这个元素的本身边距不变,还在原来位置 absolute的意思就是 如果它的父元素设置了除static之外的定位,比如pos ...
- 在Solr中配置中文分词IKAnalyzer
李克华 云计算高级群: 292870151 交流:Hadoop.NoSQL.分布式.lucene.solr.nutch 在Solr中配置中文分词IKAnalyzer 1.在配置文件schema.xml ...