Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/09/2007, 14h51   #1
Membre du Club
 
Inscription : mai 2004
Messages : 199
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mai 2004
Messages : 199
Points : 59
Points : 59
Par défaut comparaison de fichiers

Bonjour
Je voudrais savoir s'il était possible de comparer plus de deux fichiers entre eux.
J'ai 6 fichiers à comparés.
POur le moment j'utilise la fonction cmp :
Code :
1
2
 
cmp /space5/upload/ods_gicm/re7/cmo/FichierTest/F1K38683.FIC  /space5/upload/ods_gicm/re7/cmo/FichierTest/F1K45883.FIC
cell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 15h43   #2
Membre expérimenté
 
Avatar de iblis
 
Inscription : janvier 2007
Messages : 510
Détails du profil
Informations personnelles :
Âge : 45

Informations forums :
Inscription : janvier 2007
Messages : 510
Points : 510
Points : 510
Envoyer un message via Yahoo à iblis
Bonjour. Utilise diff et diff3. Un coup d'oeil à man t'en dira plus.
iblis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 15h48   #3
Membre expérimenté
 
Avatar de iblis
 
Inscription : janvier 2007
Messages : 510
Détails du profil
Informations personnelles :
Âge : 45

Informations forums :
Inscription : janvier 2007
Messages : 510
Points : 510
Points : 510
Envoyer un message via Yahoo à iblis
Hmm 6 ? Pardon, j'avais lu 3. Ça doit être faisable, dans tous les cas diff est plus raffiné que cmp. Quelle est la nature et le format de tes fichiers, quelles différences cherches-tu ? Peut-être peux-tu faire ça dans un language de script.
iblis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 15h53   #4
Membre du Club
 
Inscription : mai 2004
Messages : 199
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mai 2004
Messages : 199
Points : 59
Points : 59
ce sont des fichiers txt.
On cherche juste à savoir si il y a des différences et non lesquelles.
cell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 16h16   #5
Membre expérimenté
 
Avatar de iblis
 
Inscription : janvier 2007
Messages : 510
Détails du profil
Informations personnelles :
Âge : 45

Informations forums :
Inscription : janvier 2007
Messages : 510
Points : 510
Points : 510
Envoyer un message via Yahoo à iblis
Alors peu importe le nombre 2, 3, 6 ou que sais-je 1000. Utilise le fait que l´égalité est transitive (l'inégalité ne l'est pas) et compare deux à deux.

Soit tu choisis un étalon et y compare tous les autres (la meilleur solution, si tes fichiers ont une forte probabilité d'être tous identiques), quitte à comparer ensuite entre eux ceux qui différent de l'étalon. Soit tu formes des couples, mais cette solution n'est viable qu'en dessous d'un certain nombre de fichiers.

Sur 6 fichiers la première solution te permet déjà de voir très rapidement s'ils ne sont pas tous identiques et lesquels différent. A 6 tu peux te permettre de faire varier l'étalon (5 en tout).

Un script bash devrait faire l'affaire.
iblis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 16h30   #6
Membre du Club
 
Inscription : mai 2004
Messages : 199
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mai 2004
Messages : 199
Points : 59
Points : 59
on ma demandé de faire un script shell
et je dois comparer tous les fichiers entre eux donc on peux exclure l'idée de comparer les fichier par couple
cell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 17h32   #7
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 968
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 968
Points : 1 375
Points : 1 375
Vu la conclusion erronée de ta dernière phrase, je te conseille d'étudier d'abord les bases de la logique avant de te lancer dans un script.
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 21h33   #8
Membre expérimenté
 
Avatar de iblis
 
Inscription : janvier 2007
Messages : 510
Détails du profil
Informations personnelles :
Âge : 45

Informations forums :
Inscription : janvier 2007
Messages : 510
Points : 510
Points : 510
Envoyer un message via Yahoo à iblis
Dans le post précédent, l'as-tu vraiment lu ?, je t'ai indiqué la méthode générale à suivre.

Une comparaison se fait toujours entre deux éléments (par exemple pour décider s'ils sont identiques). Pour comparer un nombre donné d'éléments (peu importe que ce soit des fichiers ou des variables), tu dois d'abord les apparier. Plus haut, je t'invitais à réfléchir sur les hypothèses à faire sur tes données afin de réduire le nombre de couples à examiner et d'optimiser l'ordre dans lesquels tu les examines.

Pour ta gouverne, bash est le bourne again shell ; si tu es sous Linux, c'est certainement ton shell par défaut.

Et entre nous, si tu tiens des conseils des posts précédents ce n'est pas vraiment sorcier et ça tient en moins de dix lignes de code (grand maximum).

Bien sûr personne ne le fera probablement pour toi mais si tu postes tes essais on peut t'aider.
iblis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 11h34   #9
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 497
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 497
Points : 9 677
Points : 9 677
Bonjour,

Non, il n'est pas possible, en un seul appel de commande, de comparer 6 ficheirs entre eux.

Ensuite, il faut savoir ce que tu souhaites obtenir comme résultat :
  • Savoir si les 6 fichiers sont identiques
  • Savoir si, parmi les 6 fichiers, certains sont identiques.

La solution a la première possibilité t'a été donnée dans les précédetns postes : il suffit de comparer le premier fichier à chacun des 5 autres. Si tu trouves une différences à un moment, alors tu peux sortir : ils ne sont pas tous identiques.
pour cela, tu peux utiliser diff ou cmp, en analysant les codes de retour.

Pour la seconde possibilité, c'est plus complexe : tu as plus de comparaisons à faire. Si c'est ce que tu souhaites faire, écris l'algorithme sur un papier, et une fois que tu l'auras validé, alors seulement tu pourras t'intéresser au développement du script.

Si tu as des problèmes sur l'algorithme, poses ta question dans le forum éponyme.
Si tu as des questions sur le développement du script, postes ton scripts ici avec l'explication de ce qui pose problème et où tu coinces pour résoidre le problème.

Cordialement,
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 16h54   #10
Membre expérimenté
 
Avatar de iblis
 
Inscription : janvier 2007
Messages : 510
Détails du profil
Informations personnelles :
Âge : 45

Informations forums :
Inscription : janvier 2007
Messages : 510
Points : 510
Points : 510
Envoyer un message via Yahoo à iblis
Je n'aime pas mâcher le travail mais parfois un exemple aide à comprendre. Volià donc une solution simple. (Je suppose que tes fichiers sont file1 file2 ... file6)
Code :
1
2
3
4
5
6
7
#!/bin/bash
n=6
for ((i=1;i<n;i+=1)); do
    for ((j=i+1;j<=n;j+=1)); do
        cmp "file$i" "file$j"
    done
done
L'algorithme est élémentaire : il parcourt de manière exhaustive les paires non-ordonnées. C'est d'abord cela que tu dois comprendre ; la syntaxe vient ensuite (celle du shell est tout sauf déroutante).

Si tu cherches les différences utilise diff (comme cela a été dit plus haut).
iblis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 22h20   #11
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
Citation:
Envoyé par cell Voir le message
ce sont des fichiers txt.
On cherche juste à savoir si il y a des différences et non lesquelles.
Une solution rapide avec md5sum :


Code :
1
2
3
4
5
6
7
8
 
$ ls -1 Fic?
Fic1
Fic2
Fic3
Fic4
Fic5
Fic6

Code :
1
2
3
4
5
6
7
8
$ md5sum Fic* | sort -k1,1
1dcca23355272056f04fe8bf20edfce0 *Fic5
26ab0db90d72e28ad0ba1e22ee510510 *Fic2
6d7fce9fee471194aa8b5b6e47267f03 *Fic3
b026324c6904b2a9cb4b88d6d61c81d1 *Fic1
b026324c6904b2a9cb4b88d6d61c81d1 *Fic4
b026324c6904b2a9cb4b88d6d61c81d1 *Fic6
Code :
1
2
3
4
5
6
 
$ md5sum Fic* | sort -u -k1,1
1dcca23355272056f04fe8bf20edfce0 *Fic5
26ab0db90d72e28ad0ba1e22ee510510 *Fic2
6d7fce9fee471194aa8b5b6e47267f03 *Fic3
b026324c6904b2a9cb4b88d6d61c81d1 *Fic1
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h12.


 
 
 
 
Partenaires

Hébergement Web