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