Saya memiliki dua file besar (masing-masing 6GB). Mereka tidak disortir, dengan umpan baris ( \n
) sebagai pemisah. Bagaimana saya bisa membedakan mereka? Itu harus di bawah 24 jam.
sumber
Saya memiliki dua file besar (masing-masing 6GB). Mereka tidak disortir, dengan umpan baris ( \n
) sebagai pemisah. Bagaimana saya bisa membedakan mereka? Itu harus di bawah 24 jam.
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.
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.diff <(command 1) <(command 2)
<(cmd1) <(cmd2)
sintaks berfungsi (karena kedengarannya seperti mengarahkan ulang input standar dua kali!), Cobaecho hello <(cmd1) <(cmd2)
. Anda akan melihat sesuatuhello /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 darirdiff
danbsdiff
agak biner. Menginstalbdiff
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 adanyadiff
opsi seperti itu tetapicomm
mengasumsikan input yang diurutkan dan akan jauh lebih cepat jika cukup untuk keperluan Anda.sumber
comm
bekerja sangat baik untuk ini, tidak pernah mendengarnya sebelumnya tetapi ternyata itu di coreutils.