awk 2 つの大きなファイルをマージし、重複行を削除します。

awk 2 つの大きなファイルをマージし、重複行を削除します。

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

A.txt - 約90GB
B.txt - 約80GB

両方のファイルをマージし、重複した行を削除したいと思います。

どうすればいいですか?

このコマンドに加えて、他のコマンドがawkそのタスクに適している場合はお知らせください。

ベストアンサー1

awkハッシュは、すべての一意の行をメモリに保存するという意味なので、使用できません。したがって、出力ファイルがシステムで使用可能なメモリよりはるかに小さい場合にのみ使用できます。

入力ファイルがすでにソートされている場合は、次のことができます。

sort -mu A.txt B.txt > C.txt

ファイルのソートに使用されたのと同じソート順にロケールを変更する必要があるかもしれません。

これにより、ファイルごとに一度に複数の行をメモリに保存する必要がなくなります。

ソートされていない場合は、ディレクトリを削除し、170 GBの空き容量を持つファイルシステム(できるだけ高速なスペース)に-m設定して$TMPDIR待つ準備をします。

ただし、結果がソートされるため、後で必要に応じて他のファイルをマージする速度が速くなります。

sortメモリが少ないシステムでも動作するように一時ファイルが使用されます。しかし、メモリが多いほど良いです。 GNUの場合は、より良いパフォーマンスのために調整するのに役立つとオプションもsort参照してください。使用されるソート順序が重要でない場合は、ロケールを(with)に変更するのが最も効率的です。--compress-program--buffer-sizeCLC_ALL=C sort...

おすすめ記事