2つの大きなテキストファイルの比較

2つの大きなテキストファイルの比較

2つの大容量ファイル(それぞれ6 GB)があります。改行文字()は区切り文字としてソートされていません\n。どのように区別できますか? 24時間以内に服用する必要があります。

答え1

明確な答えはdiffコマンドを使用することであり、--speed-large-filesパラメータを追加するのはおそらく良い考えです。

diff --speed-large-files a.file b.file

ソートされていないファイルについて言及したので、最初にファイルをソートする必要があるかもしれません。

sort a.file > a.file.sorted
sort b.file > b.file.sorted
diff --speed-large-files a.file.sorted b.file.sorted

2番目にソートされた出力をdiffに直接渡すことで、追加の出力ファイル生成を保存できます。

sort a.file > a.file.sorted
sort b.file | diff --speed-large-files a.file.sorted -

明らかに、これらの機能は、利用可能なメモリが多いシステムで最もよく実行され、利用可能なディスク容量も多く必要です。

以前にこれらの方法を試したことがあるかどうかは、お客様の質問から明確ではありません。もしそうなら、何が間違っているのか(長すぎるかどうかなど)を知ることが役に立ちます。私は非常にドメイン固有の属性を持っていない限り、ファイルに何らかの操作を行うことができる限り、stock sortとdiffコマンドは少なくともカスタムコマンドと同じくらい良い傾向があることを常に見つけました。

答え2

入力をソートし、diffプログラムに入力がソートされたことを通知すると、速度が大幅に向上します。diff同様のオプションがあるかどうかはわかりませんが、comm入力がソートされていると仮定すると、目的に合わせて十分であればはるかに高速になります。

答え3

このbdiffツールは、コンピュータのRAMよりもはるかに大きいソートされていないファイルを処理できます。

bdiff次の手順を一度使用し、初めて使用する前にダウンロードしてコンパイルしてください。

wget https://github.com/Arkanosis/Arkonf/raw/master/tools-src/bdiff.c && \
  gcc -Wformat=0 -Wno-long-long bdiff.c -o bdiff && \
  rm bdiff.c

2つのファイルを実行しbdiffて比較します。

./bdiff a.file b.file

bdiff出力をファイルにリダイレクトすると便利です。提案とGitリポジトリへのリンクを提供してくれた@unhammerに感謝します。

答え4

数日前、私はいくつかの大きなテキストファイルでdiffを使うのに問題があったときにこのページの解決策を試しましたが、私に合ったものが見つからなかったので、テキストファイルの大きなファイル比較プログラムを処理するために特別に1つを書きました。ここに戻って利用可能であることを知らせるのは公平なようです。私はこの機能を直接使用したことがなく、大容量のテキストファイルに問題がある他の人がこの機能を試してみてください。コードは次の場所にあります。https://github.com/gtoal/bigfile-diff-compare

関連情報