diffは多くのメモリとCPUを消費します。

diffは多くのメモリとCPUを消費します。

ファイルが2つありますが、すべて.txt(525,953,272レコード)とサブセット.txt(525,298,281レコード)。各レコードは17ビットASCII整数にすぎません。両方のファイルがソートされ、各ファイルの重複履歴が削除されました。すべての値サブセット.txtにも存在しますすべて.txt。次の記録を見つけたいです。すべて.txtそこにいない人サブセット.txt

私はdiffこれら2つのファイルの間に行を書くと思って実行しようとしています。すべて.txtしかし、そこにはありません。サブセット.txt。このデバイスには64GBのメモリがあります。 30分間実行され、diffメモリの約75%を得ました。

何が起こっているのかを推測できる人はいますか?diff役に立つと主張していますか?私がdiffしたいのはこれではありませんか?別のアプローチを使用する必要がありますか?

ベストアンサー1

何が起こっているのか、そしてdiffに役立つと主張しているのかを推測できる人はいますか?これはdiffの元の意図ではありませんか?別のアプローチを使用する必要がありますか?

これは意図したことではありませんdiff。入力が並べ替えられたとき(見てわかるように)、その操作のためのツールはですcomm

$ seq 10 15 > subset.txt
$ seq 10 20 > all.txt
$ comm -13 subset.txt all.txt
16
17
18
19
20

これオプションcomm回転するので少し珍しいです。去る出力。列1にはファイル1に固有の行が含まれ、列2にはファイル2に固有の行が含まれ、列3には両方のファイルに「共通」する行が含まれています。オプションを使用して、-13「all.txt」の行のみを表示するように通信に要求します。

おすすめ記事