web-dev-qa-db-fra.com

Diffingez deux gros fichiers texte

J'ai deux gros fichiers (6 Go chacun). Ils sont non formés, avec des lignes lignes (\n) comme séparateurs. Comment puis-je leur différer? Cela devrait prendre sous 24h.

34
jonasl

La réponse la plus évidente consiste simplement à utiliser la commande diff et c'est probablement une bonne idée d'ajouter le paramètre --Speed-Large-Files à celui-ci.

diff --speed-large-files a.file b.file

Vous mentionnez des fichiers non formés alors vous devez peut-être trier les fichiers d'abord

sort a.file > a.file.sorted
sort b.file > b.file.sorted
diff --speed-large-files a.file.sorted b.file.sorted

vous pouvez enregistrer la création d'un fichier de sortie supplémentaire en utilisant la 2e sortie de tri directement dans DIFF

sort a.file > a.file.sorted
sort b.file | diff --speed-large-files a.file.sorted -

De toute évidence, ils vont mieux sur un système avec beaucoup de mémoire disponible et vous aurez probablement besoin de nombreux espaces de disque gratuits.

Votre question n'était pas claire si vous avez déjà essayé ces derniers. Si oui, il serait utile de savoir ce qui s'est mal passé (a pris trop de long, etc.). J'ai toujours constaté que les commandes de tri des stocks et de difformes ont tendance à faire au moins aussi bien que des commandes personnalisées, à moins que des propriétés spécifiques très spécifiques du domaine des fichiers permettent de faire les choses différemment.

47
Richm

Tri des entrées et raconter le programme diff. Les entrées sont triées pour une vitesse massive. Je ne connais pas de diff avec une option comme celle-là, mais comm assume une entrée triée et sera beaucoup plus rapide si cela suffit à vos besoins.

5
Karl