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

使用Unix工具删除连续重复行并保留非连续重复行的技术问询

用Unix工具删除连续重复行(保留非连续重复行)

这问题看起来简单但确实藏着小细节——要删的是连续重复的行,非连续的重复行得原封不动保留对吧?我给你分享几个实用的Unix工具解决方案,亲测好用:

方法1:用awk(最推荐,逻辑清晰)

awk是处理这类行对比需求的绝佳工具,一行命令就能搞定:

awk 'prev != $0 {print; prev=$0}' 你的输入文件

逻辑解释:

  • 我们用prev变量存储上一行的内容
  • 每次读取当前行时,对比prev和当前行$0:如果不一样,就打印当前行,然后把prev更新为当前行内容
  • 如果两行相同,就跳过不打印,完美实现“只删连续重复”的效果

测试你的例子:

假设输入内容是:

O B
O B
C D
T V
O B

运行上面的awk命令后,输出就是你想要的:

O B
C D
T V
O B

方法2:用sed(适合喜欢sed的场景)

如果你更习惯用sed,也可以用这个命令:

sed '$!N; /^\(.*\)\n\1$/!P; D' 你的输入文件

逻辑解释:

  • $!N:除了最后一行,把下一行读入模式空间(让模式空间里同时有两行内容)
  • /^\(.*\)\n\1$/!P:如果模式空间里的两行不是完全相同的,就打印第一行
  • D:删除模式空间里的第一行内容,然后循环处理剩下的内容

这个命令同样能达到你的需求,不过逻辑比awk稍复杂一点,适合已经熟悉sed语法的同学。

内容的提问来源于stack exchange,提问作者z.rubi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:32:16