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

Bash脚本如何删除连续行冒号前单词重复的对应行

Bash 文本处理实现方案

你可以直接使用awk完成该需求,核心逻辑是缓存上一行的冒号前key与完整行内容,对比当前行key后决定是否输出上一行内容,最终输出最后一行即可。

核心处理命令

直接输出处理后的结果到终端:

awk -F ':' '{
    if(prev_key == $1) {
        prev = $0
    } else {
        if(NR > 1) print prev
        prev_key = $1
        prev = $0
    }
} END {
    print prev
}' test.txt

原地修改文件的方法

方法1:GNU awk 原生原地修改(大部分Linux发行版默认支持)

gawk -i inplace -F ':' '{if(prev_key == $1){prev=$0} else {if(NR>1) print prev; prev_key=$1; prev=$0}} END{print prev}' test.txt

方法2:通用临时文件方案(兼容所有Unix类系统)

awk -F ':' '{if(prev_key == $1){prev=$0} else {if(NR>1) print prev; prev_key=$1; prev=$0}} END{print prev}' test.txt > test.tmp && mv test.tmp test.txt

逻辑说明

  • 用-F ':'指定冒号为字段分隔符,$1即可直接取到每一行冒号前的key
  • 若当前行key和上一行key相同,仅更新缓存的行内容为当前行,不输出旧的上一行
  • 若当前行key和上一行key不同,先输出缓存的上一行,再更新缓存的key和行内容
  • 遍历完全部行后输出最后缓存的行,避免遗漏尾行
  • 因题目明确不存在连续超过两行key相同的情况,该逻辑可100%覆盖需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:00:02