2つの大容量ファイルを一致させ、シェルスクリプトから違いを印刷する方法

2つの大容量ファイルを一致させ、シェルスクリプトから違いを印刷する方法

2つのファイルがあります。

File1には400,000のデジタルレコードがあります。たとえば、

1
2
3
4
5
6
..
など。

ファイル2には420kデジタルレコードもあります。たとえば、

1
2
3
4
6 
..
など。

どちらのファイルもソートされていません。 2つのファイルを一致させて違いを印刷したいです。

diff、、、、commを使用しようとするとgrep時間がかかります(1時間以上)。これは私にとって可能ではありません。

これをすばやく行うにはどうすればよいですか(違いを一致させて印刷しますか)。

私はHP-UXを使用しています。

ベストアンサー1

千万行のファイルの結果は次のとおりです。

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挿入、削除、変更などを検出しなければならないアルゴリズムがデータの配置方法に影響されるため、偏差は大きくなることがありますが、他のアルゴリズムと大きく変わることはありません。

正確に何を試しましたか?

おすすめ記事