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/62che improvvisamente lo chiarisce;)
--speed-large-filesopzione 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 rdiffed bsdiffè piuttosto binario. L'installazione bdiffdalla 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 diffprogramma che gli input sono ordinati fornirebbe un'enorme velocità. Non ne conosco nessuno diffcon un'opzione del genere, ma commassume un input ordinato e sarà molto più veloce se lo fa abbastanza per i tuoi scopi.
commha funzionato alla grande per questo, non ne avevo mai sentito parlare prima ma apparentemente è in coreutils.
mkfifoper creare[ab].file.sortedprima di usarli come output persort. Metti entrambe lesorts con&in background e usa entrambe le piped come nomi di file per diff.