回答:
最も明白な答えは、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 -
明らかに、これらは利用可能なメモリが十分にあるシステムで最もよく動作し、おそらく十分な空きディスク容量も必要になるでしょう。
あなたがこれらを以前に試したことがあるかどうかはあなたの質問から明らかではありませんでした。もしそうなら、何がうまくいかなかったのかを知るのに役立ちます(時間がかかりすぎたなど)。私はいつも、ファイルのドメイン固有のプロパティが異なることを可能にするいくつかの非常にドメイン固有のプロパティがない限り、株式の並べ替えとdiffコマンドは少なくともカスタムコマンドと同様に行う傾向があることを発見しました。
diff <(command 1) <(command 2)
<(cmd1) <(cmd2)
(それは二回、標準入力をリダイレクトするように聞こえるよう!)構文の作品を、してみてくださいecho hello <(cmd1) <(cmd2)
。あなたはhello /dev/fd/63 /dev/fd/62
突然それを明らかにするようなものを見るでしょう;)
--speed-large-files
十分なRAMがない場合、このオプションは役に立ちません。また、保存したい複数行のレコード構造がある場合、事前ソートは役に立ちません。オプションは興味深いが、出力(@unhammerによって)上記に言及rdiff
し、bsdiff
むしろバイナリです。bdiff
Heirloom Toolboxからのインストールは大変な作業のように見えます(Heirloom devtools、extinctヘッダーファイルなどが必要です)。本当に努力する価値はありますか?他の選択肢はありますか?
入力を並べ替えて、入力が並べ替えられていることをdiff
プログラムに伝えると、大幅に高速化されます。私はdiff
そのようなオプションを知っていませんが、comm
ソートされた入力を想定しており、それがあなたの目的に十分であれば、はるかに速くなります。
comm
これには素晴らしい働きをしましたが、これまで聞いたことはありませんが、明らかにcoreutilsにあります。
mkfifo
し[ab].file.sorted
て、の出力として使用する前に作成しますsort
。両方sort
のsを&
バックグラウンドに入れ、両方をdiffのファイル名として使用します。