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.
3 Réponses :
Utilisez simplement l'outil de ligne de commande diff
:
$ diff ./file1.txt ./file2.txt
Merci. Comme dit, les deux fichiers sont énormes, diff peut ne pas fonctionner dans ce cas particulier.
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.
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
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 utilisantsort
.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.