我有2个文件。
File1 有 400k 条数字记录。例如:
1
2
3
4
5
6
..
等等
文件 2 也有 420k 数字记录。例如:
1
2
3
4
6
..
等等
这两个文件都是未排序的。我想匹配两个文件并打印差异。
当我尝试使用diff
、comm
、 或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
需要检测插入、删除或更改的算法将受到数据布局方式的影响,但与其他算法不会有太大的变化。
你究竟尝试了什么?