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

如何用Bash脚本移除两个文本文件中的重复行

移除两个文件中共同存在的行

你要的是彻底删掉同时出现在两个文件里的行,只保留仅在单个文件中出现的内容,之前用的命令不对是因为它们的逻辑并非“删除跨文件重复的行”,下面给几个靠谱的解决方法:

方法一:sort + uniq -u(简单直接)

这个组合刚好能满足需求:先把两个文件的内容合并排序,uniq -u会只保留恰好出现一次的行(也就是那些只在a或只在b里的行)。

命令:

sort a.txt b.txt | uniq -u

如果之前用这个没得到正确结果,大概率是文件里有不可见字符(比如行尾空格、Windows风格的回车符\r),可以先预处理去掉这些干扰:

sort <(tr -d ' \r' < a.txt) <(tr -d ' \r' < b.txt) | uniq -u

方法二:awk(无需排序,灵活可控)

如果不想排序,或者需要自定义输出顺序,用awk更合适:

通用版(不保留原始顺序)

统计所有行的出现次数,只打印出现过一次的行:

awk '{count[$0]++} END{for(line in count) if(count[line]==1) print line}' a.txt b.txt

保留原始顺序版(先a的独有行,再b的独有行)

如果你想和示例输出的顺序一致(先a里独有的,再b里独有的),用这个:

awk 'NR==FNR{a[$0]=1;next} !($0 in a){print} {delete a[$0]} END{for(k in a) print k}' a.txt b.txt

为什么你之前的命令没用?

  • sort | uniq -u:如果之前没得到正确结果,大概率是文件有不可见字符干扰,或者没正确合并两个文件排序
  • awk '!a[$0]++':这个命令的逻辑是保留第一次出现的行,后续重复的跳过,所以会保留a里的f.g.h.com,而不是彻底删掉,不符合你的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:18:21