获取两个巨大文件之间的交集和区别

时间:2015-02-04 03:36:09

标签: linux shell grep uniq

我有两个巨大的文件,每个文件有超过400,000,000行,大小超过13GB,每行包含一个md5编号(32字节)。我想得到两个文件之间的交集,我也希望得到它们的区别。我想知道是否有一种简单而快速的方法可以做到这一点,比如使用linux shell命令。

1 个答案:

答案 0 :(得分:4)

假设文件已排序,那么comm将完成工作:

交点(两个文件中的行):

comm -12 file1 file2

差异(一个文件中的行而不是另一个文件中的行):

comm -3 file1 file2

请注意,在第二种情况下,仅file2中的行将由制表符缩进;如果要删除它,请通过sed过滤输出。

如果文件尚未排序,您可以使用process substitution动态执行此操作:

comm -12 <(sort file1) <(sort file2)
comm -3  <(sort file1) <(sort file2)

您也可以运行一次命令;以0标签开头的行只在file1;那些以1个标签开头的标签只在file2中;那些以2个标签开头的文件都在这两个文件中。