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

统计文件匹配模式间行数,超4则删除模式间所有行

按行数阈值处理start/end标记间内容

问题场景

输入文件内容如下:

------start---------
first line
second line
third line 
fourth line
------end-----------
xyx
pqr
------start---------
first line
second line
third line 
fourth line
fith line
sixth line
------end-----------

需求:统计------start---------与------end-----------之间的行数,若行数超过4则删除块内所有内容,仅保留两个标记;若行数≤4则保留原块内容。期望输出:

------start---------
first line
second line
third line 
fourth line
------end-----------
xyx
pqr
------start---------
------end-----------

现有sed -i '/start/,/end/{//!d}' filename命令只能直接删除标记间内容,无法根据行数阈值判断,需要更灵活的处理方案。

解决方案:使用awk实现

awk可以轻松统计标记间行数并执行条件判断,命令如下:

awk '/------start---------/{
    print; 
    flag=1; 
    count=0; 
    saved="";
    next
}
flag && /------end-----------/{
    flag=0; 
    if(count<=4) {
        printf "%s", saved
    }
    print; 
    next
}
flag{
    count++; 
    saved = saved $0 "\n"; 
    next
}
1' filename > output.txt

命令说明

  • 匹配到start标记时:打印该标记,开启标记位flag,初始化行数计数器count和内容缓存saved,跳过后续逻辑。
  • 标记位开启且匹配到end标记时:关闭标记位,若计数器≤4则打印缓存的内容,最后打印end标记。
  • 标记位开启且未到end时:计数器加1,将当前行存入缓存,跳过后续逻辑。
  • 末尾的1表示打印所有未被前面逻辑处理的行(即标记块外的内容)。

如果需要直接修改原文件,可执行:

awk '...' filename > temp.txt && mv temp.txt filename

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:44:59