Jawaban:
Jawaban yang paling jelas adalah hanya menggunakan perintah diff dan mungkin ide yang bagus untuk menambahkan parameter --speed-large-files ke dalamnya.
diff --speed-large-files a.file b.file
Anda menyebutkan file yang tidak disortir jadi mungkin Anda perlu mengurutkan file terlebih dahulu
sort a.file > a.file.sorted
sort b.file > b.file.sorted
diff --speed-large-files a.file.sorted b.file.sorted
Anda bisa menghemat membuat file output tambahan dengan memipis jenis output 2 langsung ke diff
sort a.file > a.file.sorted
sort b.file | diff --speed-large-files a.file.sorted -
Jelas ini akan berjalan paling baik pada sistem dengan banyak memori yang tersedia dan Anda kemungkinan akan membutuhkan banyak ruang disk juga.
Tidak jelas dari pertanyaan Anda apakah Anda pernah mencobanya sebelumnya. Jika demikian maka akan sangat membantu untuk mengetahui apa yang salah (terlalu lama dll.). Saya selalu menemukan bahwa perintah stock sort dan diff cenderung melakukan setidaknya serta perintah kustom kecuali ada beberapa properti domain yang sangat spesifik dari file yang memungkinkan untuk melakukan sesuatu secara berbeda.
diff <(command 1) <(command 2)
<(cmd1) <(cmd2)
sintaks berfungsi (karena kedengarannya seperti mengarahkan ulang input standar dua kali!), Coba echo hello <(cmd1) <(cmd2)
. Anda akan melihat sesuatu hello /dev/fd/63 /dev/fd/62
yang tiba-tiba membuatnya jelas;)
--speed-large-files
opsi tidak membantu jika Anda tidak memiliki RAM yang cukup. Juga, pre-sorting tidak membantu jika Anda memiliki struktur catatan multi-baris yang ingin Anda pertahankan. Opsi yang disebutkan di atas (oleh @unhammer) menarik, tetapi output dari rdiff
dan bsdiff
agak biner. Menginstal bdiff
dari Heirloom Toolbox terlihat seperti tugas dauning (membutuhkan Heirloom devtools, file header yang punah, ...). Apakah ini sepadan dengan usaha? Apakah ada alternatif lain?
Menyortir input dan memberi tahu diff
program tentang input yang disortir akan memberikan kecepatan besar. Saya tidak mengetahui adanya diff
opsi seperti itu tetapi comm
mengasumsikan input yang diurutkan dan akan jauh lebih cepat jika cukup untuk keperluan Anda.
comm
bekerja sangat baik untuk ini, tidak pernah mendengarnya sebelumnya tetapi ternyata itu di coreutils.
mkfifo
untuk membuat[ab].file.sorted
sebelum menggunakannya sebagai output untuksort
. Letakkan keduanyasort
dengan&
di latar belakang dan gunakan kedua piped sebagai nama file untuk diff.