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

Shell脚本如何删除指定重复原子仅保留1个且保持其余内容顺序不变

你之前用的全局去重命令会把所有元素的重复项都删掉,不符合只针对Cl去重的要求,用下面的awk命令就能实现需求:

# 保留第一个出现的Cl,其余Cl删除,其他元素完全保留原有顺序和重复项
awk '$2 == "Cl" { if (!seen[$2]++) print; next } 1' atoms.txt

如果你要和示例输出一样保留第2次出现的Cl,把条件改成seen[$2]++ == 1就行:

# 保留第2次出现的Cl,和你提供的期望输出完全匹配
awk '$2 == "Cl" { if (seen[$2]++ == 1) print; next } 1' atoms.txt

命令逻辑说明

  • 先判断当前行第二个字段是否为Cl,只有这类行才会进入去重逻辑
  • 用数组seen统计Cl的出现次数,只有命中你要保留的那次的行才会打印,其余Cl行直接跳过
  • 非Cl的行直接全部输出,不会做任何修改,其他元素的重复项和原有顺序完全不变

要批量处理多个文件的话,直接把文件名换成通配符就行,比如处理当前目录所有txt文件:

awk -i inplace '$2 == "Cl" { if (!seen[$2]++) print; next } 1' *.txt

加-i inplace参数会直接修改原文件,操作前建议先备份文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:07