J'ai deux fichiers (pouvant contenir jusqu'à 150 000 lignes, chaque ligne fait 160 octets), que je voudrais vérifier pour voir si les lignes dans chacun est le même. diff
ne fonctionnera pas pour moi (directement) parce qu'un petit pourcentage des lignes se produisent dans un ordre différent dans les deux fichiers. Typiquement, une paire de lignes sera transposée.
Quelle est la meilleure façon de voir si les mêmes lignes apparaissent dans les deux fichiers, mais où l'ordre n'a pas d'importance? Merci, ChrisComparer deux fichiers pour des lignes identiques où l'ordre n'a pas d'importance
2
A
Répondre
3
Bien qu'il soit un moyen de le faire un peu cher (pour quoi que ce soit plus je repenser), je virerais en python et procédez comme suit:
filename1 = "WHATEBVER YOUR FILENAME IS"
filename2 = "WHATEVER THE OTHER ONE IS"
file1contents = set(open(filename1).readlines())
file2contents = set(open(filename2).readlines())
if file1contents == file2contents:
print "Yup they're the same!"
else:
print "Nope, they differ. In file2, not file1:\n\n"
for diffLine in file2contents - file1contents:
print "\t", diffLine
print "\n\nIn file1, not file2:\n\n"
for diffLine in file1contents - file2contents:
print "\t", diffLine
Ce imprimerons les différentes lignes si ils diffèrent.
1
Pour seulement 150k lignes, il suffit de hacher chaque ligne et de les stocker dans une table de recherche. Ensuite, pour chaque ligne dans le fichier deux, il suffit d'effectuer la recherche.
0
Un autre script python pour ce faire:
#!/usr/bin/env python
import sys
file1 = sys.argv[1]
file2 = sys.argv[2]
lines1 = open(file1,'r').readlines()
lines2 = open(file2,'r').readlines()
lines1.sort()
lines2.sort()
s = ''
for i,line in enumerate(lines1):
if lines2[i] != line:
print '> %s' % line
print '< %s' % lines2[i]
s = 'not'
print 'file %s is %s like file %s' % (file1, s, file2)
Merci - Je venais d'écrire quelque chose de similaire en Python, car il n'y a pas de magie vaudou Unix funky déjà le faire. Problème résolu! – xnx
Trier chaque fichier puis exécuter diff? –
Ouais (+1), tu as raison à 100%, je déteste juste utiliser les fichiers temporaires! En 15 secondes en python je peux avoir la réponse et avoir accès aux différentes lignes dans les variables python ... – Crisfole