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-size
C
LC_ALL=C sort...