awk中的getline的用法

24 篇文章 0 订阅
19 篇文章 0 订阅
NR与FNR:



QUOTE:
A.awk对多输入文件的执行顺序是,先将代码作用于第一个文件(一行行读入),然后该重复的代码又作用于第二个文件,再作用于第三个文件。
B.awk对多输入文件的执行顺序产生了行序号的问题。当第一个文件执行完,下次读入第二个文件,那么第二个文件的第一行怎么算呢?如果又计为1的话,那不就两个1了么?(因为第一个文件也有第一行)。这就是NR和FNR的问题。
    NR :全局行数(第二个文件的第一行接着第一个文件尾行数顺序计数)
   FNR:当前文件自身的行数(不考虑前几个输入文件的自身行数及总数)

         例如:data1.txt中有40行,data2.txt中有50行,那么awk ‘{}’ data1.txt data2.txt
                   NR  的值依次为:1,2……40,41,42……90
                   FNR的值依次为:1,2……40, 1, 2……50 

getline函数说明:



QUOTE:
A.getline从整体上来说,应这么理解它的用法:
            当其左右 重定向符 | 或 < 时,getline作用于当前文件,读入当前文件的第一行给其后跟的变量 
            var 或$0(无变量);应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到
            的返回结果是隔行的。
            当其左右 重定向符 | 或 < 时,getline则作用于定向输入文件,由于该文件是刚打开,并没有被
            awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。
B.getline用法大致可分为三大类(每大类又分两小类),即总共有6种用法。代码如下:



QUOTE:
nawk ‘BEGIN{“cat data.txt”|getline d; print d}’ data2.txt 
nawk ‘BEGIN{“cat data.txt”|getline; print $0}’ data2.txt
nawk ‘BEGIN{getline d < “data.txt”; print d}’ data2.txt 
nawk ‘BEGIN{getline < “data.txt”; print $0}’ data2.txt
      以上四行代码均实现“只打印data.txt文件的第一行”(若打印全部行,用循环)
eg. nawk ‘BEGIN{FS=”:”;while(getline<”/etc/passwd”>0){print $1}}’ data.txt



QUOTE:
nawk ‘{getline d; print d”#”$3}’ data.txt
              awk首先读入第一行,接着处理getline函数,然后把下一行指定给变量d,再先打印d,由于d后面有换行符,所以后面紧跟的#会覆盖d,后面的$3同样也会覆盖d。




QUOTE:
nawk ‘{getline; print $0”#”$3}’ data.txt
               awk首先读入第一行接着处理getline函数,然后把下一行指定给$0,现在的$0已经是下一行内容,后面的#和$3(从$0中取)会覆盖$0的内容。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

anssummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值