linux - 获取两个大文件的交集和差异

标签 linux shell grep uniq

我有两个巨大的文件,每个文件有超过 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/

相关文章:

php - 如何在 PHP 中执行 linux 命令并以原始格式回显输出?

string - grep 查找文件中的一行,然后删除该行

regex - SED 和 GREP 显示不同的结果

mysql-server 无法在 Linux 上安装

c - <= token 之前的预期表达式

linux - Bash-检查目录中存在什么类型的文件

linux - 我试图了解如何在 grep 和 wc 中使用特殊字符

linux - grep linux 二进制文件中的空值

linux - 过滤/etc/passwd 只显示普通用户

bash - 使用 mysql 的结果填充 zenity 列表