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

如何用sed或awk删除文件每K行序列中的第m和第n行

问题需求

需要使用sed或awk工具,删除文件中每K行组成的序列(块)里的第m行和第n行。以K=9、m=3、n=7为例:每个9行的块内,删除该块的第3行和第7行,且不能通过匹配行内容实现(行内容可能任意)。

输入示例

文件input.txt内容:

Aline1
Aline2
Aline3
Aline4
Aline5
Aline6
Aline7
Aline8
Aline9
Bline1
Bline2
Bline3
Bline4
Bline5
Bline6
Bline7
Bline8
Bline9
...

期望输出

Aline1
Aline2
Aline4
Aline5
Aline6
Aline8
Aline9
Bline1
Bline2
Bline4
Bline5
Bline6
Bline8
Bline9
...

错误尝试

之前使用的命令逻辑错误,因为是基于全局行号的模运算,而非每个块内的相对行号:

awk '(NR)%3 && (NR)%7' input.txt
解决方案

方法1:使用awk实现

核心是计算每个块内的相对行号,判断是否为需要删除的行,保留其余行:

awk '((NR-1)%9 + 1) != 3 && ((NR-1)%9 + 1) !=7' input.txt

逻辑说明

  • (NR-1)%9:将全局行号NR转换为块内的偏移量(0~8)
  • +1:偏移量转为块内的实际行号(1~9)
  • 条件判断:排除块内第3行和第7行,其余行输出

方法2:使用sed实现

直接定位每个块内需要删除的行(全局行号为m + t*K、n + t*K,t为0,1,2...):

sed -e '3~9d' -e '7~9d' input.txt

逻辑说明

  • 3~9d:删除第3行,之后每间隔9行删除一次(对应每个块的第3行:3,12,21...)
  • 7~9d:删除第7行,之后每间隔9行删除一次(对应每个块的第7行:7,16,25...)
  • -e:串联多个sed命令,依次执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:25:26