You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用awk打印第4行及之后每隔5行的内容?

解决AWK按指定规则打印行的问题

给定数据文件内容:

1,A
    2,B
    3,C
    4,D
    5,E
    6,F
    7,G
    8,H
    9,I
   10,J
   11,K
   12,L
   13,M
   14,N

需求是打印第4行,之后从第4行开始每隔5行打印一行,即输出第4、9、14行。

你原来的代码awk '{if(NR==4 || (NR>4 && NR==NR+7)) print $0}' file存在逻辑错误:NR==NR+7永远不可能成立,因为一个数不可能等于自身加7,而且需求的间隔是5行,不是7。

正确的AWK写法

可以用两种方式实现:

方式一:利用行号的模运算

awk 'NR == 4 || (NR > 4 && (NR - 4) % 5 == 0)' file

解释:

  • NR == 4:直接匹配第4行
  • (NR - 4) % 5 == 0:计算当前行号与第4行的差值,当差值是5的倍数时,说明是每隔5行的目标行(4+5=9,9+5=14,以此类推)

方式二:使用计数器控制

awk '{if(NR==4){print; cnt=NR} else if(NR - cnt ==5){print; cnt=NR}}' file

解释:

  • 匹配到第4行时打印,并记录当前行号到cnt
  • 后续行如果与cnt的差值为5,就打印并更新cnt为当前行号,实现每隔5行打印的效果

执行任意一种代码后,都会得到期望输出:

4,D
9,I
14,N

内容的提问来源于stack exchange,提问作者Process1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:30:32