有时我需要比较两个文本文件。显然,diff
显示了差异,同时也隐藏了相似之处,这很重要。
假设我想对这些文件进行其他比较:设置并集,交集和减法,将每条线视为集合中的元素。
是否有类似的简单通用工具或单行代码可以做到这一点?
例子:
a.txt
john
mary
b.txt
adam
john
$> set_union a.txt b.txt
john
mary
adam
$> set_intersection a.txt b.txt
john
$> set_difference a.txt b.txt
mary
最佳答案
联盟:sort -u
文件...
交叉点:sort
文件... | uniq -d
总体差异(元素仅在文件之一中):sort
文件... | uniq -u
数学差异(在一个文件中仅元素一次):sort
文件... | uinq -u | sort - <(sort -u
文件X ) | uniq -d
前两个命令为我提供了所有独特的元素。然后,将其与我们感兴趣的文件合并。sort - <(sort -u
fileX )
的命令分割:-
将处理标准输入(即所有唯一元素的列表)。<(...)
运行命令,将输出写入临时文件,然后将文件路径传递给命令。
因此,这是所有唯一元素加上fileX中所有唯一元素的混合。这样,重复项就是仅在fileX中的唯一元素。