我有两个巨大的文件,每个文件有超过 400、000、000 行,大小超过 13GB,每行包含一个 md5 数字(32 字节)。我想获得两个文件之间的交集,也想获得它们之间的差异。我想知道是否有一种简单而快速的方法可以做到这一点,比如使用 linux shell 命令。
最佳答案
假设文件已排序,那么 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 个选项卡开头的那些在两个文件中。
关于linux - 获取两个大文件的交集和差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28313076/