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

BASH:如何对固定格式文件的关联列排序并去除重复数据?

解决固定格式文件按元素名去重并保留首条记录的问题

针对你这个固定格式文件的去重需求——只保留每个元素(如SI、H)的第一条记录,同时保留原子ID,这里有个非常高效的awk方案,完美适配固定宽度的字段处理:

核心命令

awk '{ 
    # 提取第二列(第6到第10个字符,对应固定格式的第二个5char字段)
    elem = substr($0, 6, 5)
    # 去除元素名前后的空格(因为固定格式会补空格占满5位)
    gsub(/^[[:space:]]+|[[:space:]]+$/, "", elem)
} 
# 只打印每个元素的第一条记录
!seen[elem]++' your_input_file.txt

命令解释

  1. 提取固定字段:substr($0,6,5)精准截取第二列的5个字符(因为第一列是前5位,所以从第6位开始取5个)。
  2. 清理元素名:gsub命令去掉元素名前后的空格,把类似"SI "的格式转换成纯净的"SI"。
  3. 去重逻辑:!seen[elem]++是awk经典的去重技巧——用数组seen记录已经处理过的元素名,第一次遇到某个元素时,seen[elem]为0,!0为真,就打印当前行;之后再遇到该元素时,seen[elem]会变成1及以上,条件不成立,就跳过打印。

效果验证

用你提供的示例输入测试,这个命令会输出:

1SI SI 1 0.411 3.644 1.684
14164H H14164 0.322 1.045 10.580

完全符合你期望的结果,既保留了每个元素的第一条记录,又不会打乱原文件的行顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:43:58