utilisation de diff sous unix

utilisation de diff sous unix - Shell/Batch - Programmation

Marsh Posté le 27-06-2007 à 10:22:40    

Bonjour,
pour comparer deux fichiers, j'utilise la commande diff mais je voudrai qu'elle ne prenne pas en compte le numero de ligne (si c'est possible).
 
Voici un exemple:
fic1         fic2
aaaaa     aaaaa
bbbbb     ccccc
ccccc     ddddd
ddddd     bbbbb
 
quand je fais diff fic1 fic2, je voudrai qu'il me retourne que les fichiers sont identiques.
Je n'ai trouvé comment faire. J'espere que c'est réalisable.
 
Merci.
deck10

Reply

Marsh Posté le 27-06-2007 à 10:22:40   

Reply

Marsh Posté le 27-06-2007 à 10:27:21    

deck10 a écrit :

je voudrai qu'il me retourne que les fichiers sont identiques.


Ils ne le sont pas au sens de diff, si tu veux une horreur pareille il faut te faire un script helper qui va créer toutes les permuations possibles du second fichier et les differ une à une avec le premier fichier (amuse toi bien)

 

(et diff ne prend pas en compte "les numéros de lignes", il fait simplement du matching de sous-séquences en sommet-fond ligne à ligne)


Message édité par masklinn le 27-06-2007 à 10:28:34

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 27-06-2007 à 10:38:23    

ok.
Sinon, je viens de penser à un truc. Vu que je ne peux pas connaître l'ordre des mots, j'ai pensé à trier les 2 fichiers par ordre alphabétique et les comparer après.
 
Savez s'il existe une commande pour trier un fichier et le remettre en ordre alphabétique?

Reply

Marsh Posté le 27-06-2007 à 10:39:15    

man sort


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 27-06-2007 à 10:41:07    

Si tu peux passer par des fichiers temporaires, tu peux essayer un truc dans le genre:

Code :
  1. cat fic1 | sort  > temp1
  2. cat fic2 | sort  > temp2
  3. diff temp1 temp2
 

edit: [:benou_grilled] over grilled

Message cité 1 fois
Message édité par anapajari le 27-06-2007 à 10:41:54
Reply

Marsh Posté le 27-06-2007 à 10:50:37    

merci

Reply

Marsh Posté le 27-06-2007 à 10:55:26    

anapajari a écrit :

Si tu peux passer par des fichiers temporaires, tu peux essayer un truc dans le genre:

Code :
  1. cat fic1 | sort  > temp1
  2. cat fic2 | sort  > temp2
  3. diff temp1 temp2
 

edit: [:benou_grilled] over grilled


sort f2 > temp
sort f1 | diff - temp


Je suis sûr qu'il y a un meilleur moyen de le faire sans fichiers temporaires, mais j'arrive pas à le trouver [:sisicaivrai]


Message édité par masklinn le 27-06-2007 à 10:55:52

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 27-06-2007 à 11:22:13    

Code :
  1. perl -e 'my $a =`sort fic1`; my $b =`sort fic2`; if ( $a ne $b){ print "fichiers différents\n";}else{print "fichiers identiques\n";}'


[:dawak]

Message cité 1 fois
Message édité par anapajari le 27-06-2007 à 11:22:30
Reply

Marsh Posté le 27-06-2007 à 11:27:49    

anapajari a écrit :

Code :
  1. perl -e 'my $a =`sort fic1`; my $b =`sort fic2`; if ( $a ne $b){ print "fichiers différents\n";}else{print "fichiers identiques\n";}'


[:dawak]


J'ai parlé d'un meilleur moyen, pas d'une espèce d'imondice


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 27-06-2007 à 11:29:48    

mais avec ce code, tu n'as pas la différence entre les fichiers.
 
Pour ne pas avoir de fichier tmp, je fais sort f1 | sort > f1

Reply

Marsh Posté le 27-06-2007 à 11:29:48   

Reply

Marsh Posté le 27-06-2007 à 11:38:51    

masklinn a écrit :

J'ai parlé d'un meilleur moyen, pas d'une espèce d'imondice


rooh ça va je deconnais

deck10 a écrit :

Pour ne pas avoir de fichier tmp, je fais sort f1 | sort > f1


ou alors man sort et

Code :
  1. sort f1 -o f1


 

Reply

Marsh Posté le 27-06-2007 à 12:24:39    

deck10 a écrit :

Pour ne pas avoir de fichier tmp, je fais sort f1 | sort > f1


Si ça marche, c'est seulement par hasard. Essaie avec un fichier plus gros, et tu verra que dans certains cas tu te retrouvera avec un fichier f1 vide. On ne peut jamais écrire dans un fichier qu'on est en train de lire, sauf si la commande est faite spécialement pour ça (genre le flag -i de sed ou perl).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed