awk选择性输出

一个序列1开始到100结束,其中步长是4,打印41前面的三个数字

seq 1 4 100 |awk '/\<41\>/{for(i=NR-3;i<NR;i++)print a[i%3]}{a[NR%3]=$0}'

33

37

29

 

解析:如果是打印三个数字的话,那么就是循环三次,所以后面用到了循环三次。再有就是最后面的对序列里面的子进行三个取余的排序,非常简便。下面进行分解操作:

1  1   a[1]   1

2  5   a[2]   5

3  9   a[0]   9

4  13  a[1]   13

5  17  a[2]   17

........

一次类推,等到匹配到41的时候不在执行最后面的a[NR%3]=$0这个语句,所以这时候输出的就是41前面的那三个数字。所以输出了29 33 37三个。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值