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

Linux命令需求:合并文件按姓氏排序、去重后保存至新文件

问题根源

你用的sort -uk2之所以会误删同姓氏不同名字的条目,是因为-k2指定了以第二列(姓氏)作为排序和去重的依据——sort会把所有姓氏相同的行视为重复项,只保留第一个出现的,完全忽略了名字的差异。

可行解决方案

方案1:先去全量重复,再按姓氏排序

先合并两个文件,用sort -u仅去除完全重复的整行(只有两行内容完全一致才会被去重),再单独按姓氏排序:

cat fileA fileB | sort -u | sort -k2 > fileC

方案2:用awk精准去重+排序

用awk的关联数组实现整行去重,再管道给sort按姓氏排序,逻辑更直观,也减少一次排序的开销:

awk '!seen[$0]++' fileA fileB | sort -k2 > fileC

这里seen[$0]会记录每一行的出现次数,第一次遇到某行时输出,后续重复行直接跳过,完美实现仅删除完全重复条目的需求。

方案3:单次sort完成所有操作

如果你想只用一条sort命令搞定,可以指定多关键字排序:先按姓氏排序,姓氏相同时按名字排序,再用-u仅去除完全重复的整行(此时重复行必然相邻):

sort -k2,2 -k1,1 -u fileA fileB > fileC

-k2,2确保主排序依据是姓氏,-k1,1作为次要排序依据保证同姓氏的条目按名字排序,-u只会移除完全相同的整行,不会影响同姓氏不同名字的条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:15:34