linux getline函数用法,Linux文本处理三剑客之awk学习笔记05:getline用法详解

本文详细介绍了Linux awk中的getline函数用法,包括无参数和带参数的使用,以及从文件、命令和协程中读取数据。讲解了getline的返回值、条件判断和错误处理,同时对比了getline与next指令的区别。还讨论了如何通过getline与shell命令交互,特别是使用coproc实现异步执行,并给出了多个实例解析。
摘要由CSDN通过智能技术生成

getline用法详解

在默认情况下,awk支持从文件或者STDIN中读取数据。我们也可以使用getline来灵活读取数据,例如在main代码块执行过程中读取某个非待处理文件的数据,或者从某个读取某个shell命令结果数据。

getline有返回值:1:正确读取到了数据。

0:读取数据遇到EOF。

负数:读取遇到了错误。-1表示文件无法打开,-2表示IO操作需要重试。遇到错误时还会使用变量ERRNO来描述错误。

为了awk代码的健壮性,在使用getline的时候,一般会加上条件判断。if((getline)<0){...}

if((getline)<=0){...}

if((getline)>0){...}

记得将getline使用小括号包裹,否则getline<0会被识别为输入重定向而不是大小判断。

无参数的getline

getline无参数时表示立即从当前数据流(文件或者STDIN)中读取下一条记录保存至$0。做字段分割。然后从getline的位置继续向后执行awk代码。

此时getline会设置$0、位置参数($1...$NF)、NR、FNR和RT。# awk '/^1/{print;getline;print}' a.txt

1   Bob     male    28   abc@qq.com     18023394012

2   Alice   female  24   def@gmail.com  18084925203

10  Bruce   female  27   bcbd@139.com   13942943905

10  Bruce   female  27   bcbd@139.com   13942943905

记住,print省略参数表示print $0。从输出结果来看,第4行比较诡异。因为Bruce那行已经是文件的末尾,此时再getline会遇到EOF,返回值为0。$0不做修改,依然是Bruce那行。因此Bruce那行输出了两次。

所以我们最好是对getline做条件判断,增强代码健壮性。# awk '/^1/{print;if((getline)<=0){exit};print}' a.txt

1   Bob     male    28   abc@qq.com     18023394012

2   Alice   female  24   def@gmail.com  18084925203

10  Bruce   female  27   bcbd@139.com   13942943905

awk中有另外一个指令类似于getline,叫next,我们先来看执行结果。# awk '/^1/{print;next;print}' a.txt

1   Bob     male    28   abc@qq.com     18023394012

10  Bruce   female  27

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值