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

使用AWK删除文本文件中含重复SOL编号的行

解决方法:基于SOL编号去重(无论位置)

你可以用下面的awk脚本来实现需求——它会追踪每个SOL编号的首次出现,只保留包含该编号的第一行,不管SOL在第一列还是第二列:

awk '{
    # 遍历当前行的所有字段,定位以SOL开头的标识
    for (i = 1; i <= NF; i++) {
        if ($i ~ /^SOL/) {
            sol_id = $i
            break
        }
    }
    # 仅当该SOL编号是首次出现时,打印当前行
    if (!seen[sol_id]++) {
        print $0
    }
}' data.txt

工作原理

  1. 定位SOL编号:脚本会逐行检查每个字段,找到以SOL开头的字符串(用正则/^SOL/匹配),把它存在sol_id变量里。
  2. 去重逻辑:用seen数组记录每个SOL编号是否已经出现过。如果seen[sol_id]的值为0(首次出现),就打印当前行,同时把seen[sol_id]加1标记为已出现;如果已经标记过,就跳过该行。

示例验证

比如你的测试用例:

115993 SOL269
SOL269 84911
12373 SOL269

运行脚本后,只会输出第一行115993 SOL269,后两行因为SOL269已经出现过,会被自动过滤,完全符合你的要求。

和原有命令的区别

你之前用的awk '!seen[$0]++' data.txt是基于整行内容去重,只有当两行完全相同时才会删除重复项;而上面的脚本是基于SOL编号去重,只要行里包含的SOL编号已经出现过,不管整行内容是什么,都会被过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 09:12:46