如何匹配2个大文件并在shell脚本中打印差异

如何匹配2个大文件并在shell脚本中打印差异

我有2个文件。

File1 有 400k 条数字记录。例如:

1
2
3
4
5
6
..
等等

文件 2 也有 420k 数字记录。例如:

1
2
3
4
6 
..
等等

这两个文件都是未排序的。我想匹配两个文件并打印差异。

当我尝试使用diffcomm、 或grep需要很长时间(超过一个小时)。这对我来说是不可行的。

我怎样才能更快地做到这一点(匹配并打印差异)。

我用的是HP-UX。

答案1

在 1000 万行文件中,生成为:

seq 10000000 |
  tee a |
  awk 'rand() < 0.05 {print int(1000000 * rand())}; 1' > b

所有的:

diff a b | wc -l

comm -3 <(sort a) <(sort b) | wc -l

(ksh/bash/zsh 语法)

cmp -l a b | wc -l

在一台使用了 3 年的低端 PC(运行 Linux)上花费了不到 30 秒。

diff根据内容的不同,可能会有很大的变化,因为diff需要检测插入、删除或更改的算法将受到数据布局方式的影响,但与其他算法不会有太大的变化。

你究竟尝试了什么?

相关内容