如何用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
相关产品推荐
相关产品推荐

