Risposte:
La risposta più ovvia è solo usare il comando diff ed è probabilmente una buona idea aggiungere ad esso il parametro --speed-large-files.
diff --speed-large-files a.file b.file
Citi file non ordinati, quindi forse devi prima ordinare i file
sort a.file > a.file.sorted
sort b.file > b.file.sorted
diff --speed-large-files a.file.sorted b.file.sorted
è possibile salvare la creazione di un file di output aggiuntivo eseguendo il piping dell'output del 2 ° ordinamento direttamente in diff
sort a.file > a.file.sorted
sort b.file | diff --speed-large-files a.file.sorted -
Ovviamente questi funzioneranno meglio su un sistema con molta memoria disponibile e probabilmente avrai bisogno anche di molto spazio libero su disco.
Non è chiaro dalla tua domanda se hai provato questi prima. In tal caso, sarebbe utile sapere cosa è andato storto (impiegando troppo tempo, ecc.). Ho sempre scoperto che i comandi stock sort e diff tendono a fare almeno così come i comandi personalizzati a meno che non ci siano alcune proprietà molto specifiche dei file che rendono possibile fare le cose in modo diverso.
diff <(command 1) <(command 2)
<(cmd1) <(cmd2)
sintassi funzioni (in quanto sembra reindirizzare due volte lo standard input!), Prova echo hello <(cmd1) <(cmd2)
. Vedrai qualcosa del genere hello /dev/fd/63 /dev/fd/62
che improvvisamente lo chiarisce;)
--speed-large-files
opzione non aiuta se non si dispone di RAM sufficiente. Inoltre, il pre-ordinamento non è utile se si dispone di una struttura di record multilinea che si desidera conservare. Le opzioni di cui sopra (di @unhammer) sono interessanti, ma l'output da rdiff
ed bsdiff
è piuttosto binario. L'installazione bdiff
dalla Casella degli strumenti di Heirloom sembra un'attività dauning (richiede devtools di Heirloom, file di intestazione estinti, ...). Ne vale davvero la pena? Ci sono altre alternative?
Ordinare gli input e dire al diff
programma che gli input sono ordinati fornirebbe un'enorme velocità. Non ne conosco nessuno diff
con un'opzione del genere, ma comm
assume un input ordinato e sarà molto più veloce se lo fa abbastanza per i tuoi scopi.
comm
ha funzionato alla grande per questo, non ne avevo mai sentito parlare prima ma apparentemente è in coreutils.
mkfifo
per creare[ab].file.sorted
prima di usarli come output persort
. Metti entrambe lesort
s con&
in background e usa entrambe le piped come nomi di file per diff.