1
votes

Comment comparer deux énormes fichiers texte sous Linux et obtenir la différence

J'ai deux fichiers texte, les deux font environ 1 milliard de lignes mais l'un a 218 lignes de plus que l'autre, j'ai besoin de trouver les 218 lignes et de les enregistrer pour analyse.

Quelle serait la solution la plus rapide pour y parvenir? existe-t-il une commande miracle shell ou une bibliothèque python qui offre le résultat souhaité avec la meilleure efficacité?

Merci beaucoup.


6 commentaires

Les lignes sont-elles dans le même ordre dans les deux fichiers?


Je ne sais pas, je ne peux pas faire cette supposition.


diff est votre meilleur pari, il a un argument --speed-large-files qui fonctionne supposément mieux avec des fichiers volumineux. Vous devrez cependant trier les deux fichiers en utilisant sort .


Merci, qu'entendez-vous par tri , trier sur quoi?


Triez les lignes de chaque fichier afin qu'elles puissent être diff 'd.


votre question est un miracle jusqu'à ce que vous l'expliquiez clairement avec les fichiers que vous avez.


3 Réponses :


0
votes

Utilisez simplement l'outil de ligne de commande diff :

$ diff ./file1.txt ./file2.txt


1 commentaires

Merci. Comme dit, les deux fichiers sont énormes, diff peut ne pas fonctionner dans ce cas particulier.



0
votes

comm produira une sortie plus lisible que diff (et sa sortie sera plus facile à diriger vers quelque chose else), et devrait être plus efficace:

$ cat file1.txt         
dog
cat
rabbit
$ cat file2.txt
cat
dog
rabbit
llama
$ comm -13 <(sort file1.txt) <(sort file2.txt)
llama

Son comportement par défaut est d'imprimer trois colonnes - lignes uniquement dans fichier1, lignes uniquement dans fichier2 et lignes dans les deux. Les -1 et -3 suppriment ces colonnes respectives. Si file1 avait les lignes supplémentaires, vous utiliseriez donc -23 à la place.

Si votre shell ne prend pas en charge la redirection de style , vous devrez trier les fichiers séparément.


0 commentaires

0
votes

Exécutez simplement la commande pour obtenir la différence entre deux fichiers (fichier X et fichier Y).

diff -U 0 x y >> z

Ou si vous souhaitez stocker la différence dans un autre fichier (z), exécutez la commande

diff -U 0 x y


0 commentaires