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

Linux中如何基于文件首列删除所有重复行且不保留任何重复项

解决方案

直接用awk两次遍历文件即可实现需求,命令如下:

awk 'NR==FNR{count[$1]++; next} count[$1] == 1' 你的文本文件路径 你的文本文件路径

命令逻辑说明

  • 第一遍扫描文件时,仅统计第一列每个值出现的总次数,存入count数组,不做输出
  • 第二遍再次逐行扫描同一个文件,只有当当前行第一列的出现次数恰好为1时,才输出这一行;所有出现次数≥2的第一列对应的行,会被全部过滤掉,不会保留任何一条

为什么你之前用的命令不符合要求

  • awk '!seen[$1]++'的逻辑是:第一次遇到某个第一列值时输出,后续再遇到相同值就跳过,本质是为每个重复值保留第一条记录,和你“重复就全删”的需求不符
  • sort -t'-' -k1,2n | uniq的逻辑是排序后把连续重复的行去重,默认也是为每个重复值保留一条记录,达不到全删的效果

效果验证

用你提供的样例输入执行上述命令,输出结果和你预期完全一致:

AX-172322243 2
AX-172322331 2
AX-172322354 2
AX-172322383 2
AX-172322440 2
AX-172322719 7

如果觉得写两次文件名麻烦,也可以用下面这个等效写法,不过可读性稍差:

awk '{cnt[$1]++} END{while((getline l < FILENAME)>0){split(l,a," "); if(cnt[a[1]]==1) print l}}' 你的文本文件路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:48:11