Linux中awk之getline命令

欲要getline,首先需要搞清楚$0,NR,FNR这几个概念。
所谓NR可以理解成Number of Record,或者说是行号,而FNR可以理解为Number of Record in File,或者成为文件内行号.
听起来没啥区别。实际上如果你只有一个文件要awk处理,NR和FNR就是一回事,如下面所示,同一个文件bbs-list-3,对于
每一行输出的NR和FNR是相同的。

    manu@manu:~/code/shell/awk$ cat bbs-list-3
    aardvark 555-5553 1200/300 B
    alpo-net 555-3412 2400/1200/300 A
    barfly 555-7685 1200/300 A

    manu@manu:~/code/shell/awk$ awk '{printf "%-2d %-2d %s\n",NR,FNR,$0 }' bbs-list-3
    1 1 aardvark 555-5553 1200/300 B
    2 2 alpo-net 555-3412 2400/1200/300 A
    3 3 barfly 555-7685 1200/300 A

但是如果你有多个文件要处理,情况就不同了。NR不管你是位于那个文件,每读一行NR++,但是如果处理的文件发生了变化
,FNR从1开始重新计数,如下图所示:

我们以几个例子来讲述getline的用法,以及解释输出为何是这样:首先我们的基准文件是:

    1 getline
我们看下上面的table,getline会将得到的下一条record赋给$0,同时NR,FNR都会++。

   2 getline var
   这个对应的是table的第二条,getline var,会将取到的下一条record赋值给 var,NR++,FNR++,而$0不发生任何的变化。
   看下图,每次取到下一条record,赋值给tmp,而$0,从未发生变化,因为getline var 这种模式,从不改变$0.

   3 command | getline
   表格里面显示,会影响$0,将执行command的结果赋值给$0,复制我们可以用下面的例子展示下:

   4 command | getline var
   这个不多说了,会将command的输出赋值给var,而$0保持不变。

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值