如何计算两文件中条目精确重复次数后的剩余差异?
按条目出现次数差生成结果文件
grep -v -f的问题在于它会直接排除所有在参考文件里的条目,完全不考虑出现次数,所以没法满足你的需求。用awk可以轻松实现按次数差保留条目:
脚本实现
创建一个awk脚本(比如count_diff.awk):
# 统计File2中每个条目的出现次数 NR==FNR { cnt[$0]++; next } # 遍历File1,每遇到一个条目就将对应计数减1,计数为负时输出该条目 { if (--cnt[$0] < 0) print $0 }
执行命令
awk -f count_diff.awk File2.txt File1.txt > Finalfile.txt
原理说明
- 先读取
File2.txt,用数组cnt记录每个条目的出现次数 - 再读取
File1.txt,每处理一个条目就把对应cnt值减1:- 如果减完后
cnt仍≥0,说明这个条目在File1里的次数还没超过File2,不输出 - 如果减完后
cnt<0,说明这是File1比File2多出来的条目,直接输出
- 如果减完后
示例验证
假设:
File1.txt:
Data3 Data3 Data3 Data3 Data1 Data2
File2.txt:
Data3 Data3 Data1
执行后Finalfile.txt内容:
Data3 Data3 Data2
完全匹配你要的结果。
内容的提问来源于stack exchange,提问作者Katie S
相关产品推荐
相关产品推荐

