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

Ubuntu下如何提取两个文件的重复与唯一值并分别保存?

在Ubuntu中提取两个文件的重复值与唯一值

问题分析

你之前使用的命令中RS=""是错误的关键——这个选项会让awk将整个文件内容当作单个记录处理,而非默认的每行一个记录,导致匹配逻辑完全失效,因此输出了全部内容。

正确实现方法

1. 提取两个文件的重复值(同时存在于file1和file2)

执行以下命令,结果会保存到duplicates.txt:

awk 'NR==FNR{a[$0]; next} $0 in a' file1.txt file2.txt > duplicates.txt
  • 逻辑说明:
    • NR==FNR:仅在处理第一个文件(file1.txt)时执行此块,将每行内容存入数组a
    • next:跳过后续逻辑,直接处理下一行
    • $0 in a:处理第二个文件(file2.txt)时,检查当前行是否在数组a中(即是否存在于file1),满足则输出

2. 提取file2中独有的唯一值(仅存在于file2,不在file1)

执行以下命令,结果保存到unique.txt:

awk 'NR==FNR{a[$0]; next} !($0 in a)' file1.txt file2.txt > unique.txt
  • 逻辑说明:和上面的命令类似,仅将判断条件改为!($0 in a),即输出file2中不存在于file1的行

3. 提取两个文件中所有仅出现一次的内容(通用场景)

如果需要提取两个文件里总共只出现过一次的内容(比如file1有独有的行,file2有独有的行,都纳入结果),用这个命令:

awk '{a[$0]++} END{for(k in a) if(a[k]==1) print k}' file1.txt file2.txt > all_unique.txt
  • 逻辑说明:
    • a[$0]++:遍历所有行,统计每行出现的次数
    • END块:所有行处理完成后,遍历数组a,输出出现次数为1的行

验证结果

按照你的示例文件执行上述命令后:

  • duplicates.txt内容:
abc
123
321
  • unique.txt内容:
456

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:25:19