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 17/02/2011, 20h33   #1
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 130
Points : 29
Points : 29
Par défaut Shell comparaison niveau sup

Bonsoir à tous!

Je développe un script de comparaison entre 2 fichiers.

Code :
1
2
3
4
5
FIC1:
AZERTY,TOTO,TITI
 
FIC2:
AZERTY,TATA,POPO

Il y a une erreur si le checksum des deux fichiers est différent:

donc si le checksum est différent je lance un cmp entre les deux fichiers qui me donne la ligne et le caractère qui diffère:

Je voudrais maintenant qu'il me renvoie via le cmp le caractère exacte qui est faux dans un fichier qui s’appelle AZERTY.txt ( donc le 1er mot du fichier)

Voila mon script :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#variables
FICHIER1=...
FICHIER2=...
 
#checksum du fichier1
CK_F1=$(cksum ${FICHIER1} | awk '{print $1";"$2}'  )
CK_F2=$(cksum ${FICHIER2}| awk '{print $1";"$2}' )
#DIFF=diff $FICHIER1 $FICHIER2
 
if [ "x$CK_F1" = "x$CK_F2" ]
 then
 echo "Les fichiers $FICHIER1 et $FICHIER2 sont identiques"
  else
  echo "Les fichiers $FICHIER1 et $FICHIER2 sont diffèrents"
 
 cmp $FICHIER1 $FICHIER2 
 
 
fi
ghostrider95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 11h23   #2
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Dans ce cas là, mieux vaut donner un exemple concret de ce que tu veux

Ce que je comprends, c'est que tu veux avoir "A" dans un fichier AZERTY.txt, mais je ne suis pas sur que ça soit exactement cela ?

Que fais-tu si tu as ceci comme fichier ?
Code :
1
2
3
4
5
FIC1:
AZERTY,TOTO,TITI
 
FIC2:
QWERTY,TATA,POPO
Est-ce que tu sous-entends que les fichiers sont composés de champs séparés par des virgules (par rapport au fait qu'il faille prendre le premier mot, et ça peut aussi simplifier le boulot) ?

Avec cmp, tu peux utiliser l'option -b qui va t'afficher la ligne qui contient une différence ainsi que le caractère qui diffère... un petit coup de cut / awk / sed derrière et tu devrais pouvoir récupérer ce qui t'intéresse ?
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 17h42   #3
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 703
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 703
Points : 2 115
Points : 2 115
Pourquoi ajouter du flou et des traitements inutiles avec le calcul d'un checksum, à moins de faire la comparaison avec des signatures fournis lors d'un download par exemple....

Une seule ligne obtiens le même résultat:
Code :
1
2
 
cmp ${FICHIER1} ${FICHIER2} && echo "${FICHIER1} et ${FICHIER2} sont identiques"
  • si les fichiers sont identiques, cmp retourne 0, ce qui suis && est exécuté
  • si les fichiers sont différents, cmp retourne 1, t'affiche le problème, ce qui suis && n'est pas exécuté.
  • si l'un des fichiers est absent, cmp retourne >1, t'affiche le problème, ce qui suis && n'est pas executé.

exemple
Code ksh :
1
2
3
4
5
6
7
8
$ cmp  strange.c strtok.c && echo "les fichiers sont identiques"
strange.c strtok.c sont différents: octet 1, ligne 1
 
$ cmp  strange.c strange.c && echo "les fichiers sont identiques"
les fichiers sont identiques
 
$cmp  strange.c unknown.c && echo "les fichier sont identiques"
cmp: unknown.c: Aucun fichier ou répertoire de ce type
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis.
http://www.improetcompagnie.com/publ...ctacles-6.html

Citation:
Envoyé par Isaac Asimov
Pour réussir, il ne suffit pas de prévoir. Il faut aussi savoir improviser
Pour les utilisateurs d'emacs:
http://www.emacswiki.org/

Attends de voir ce qui vas sortir de:
http://www.pushmid.com
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 21h56   #4
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 130
Points : 29
Points : 29
Je vous ré explique le problème:

fic1.txt:

Code :
1
2
AZERTY=AZERTY,QWERTY=QWERTY
AZERTY=QWERTY,QWERTY=AZERTY
fic2.txt

Code :
1
2
AZERTY=AZERTY,QWERTY=QWERTY
AZERTY=QWERTY,QWYERTY=AZERTY
Mon script actuel détecte que les deux fichiers sont diffèrent grâce au checksum.

Dans mon script, si il y a différence j'ai pensé alors de lancé un " cmp fic1.txt fic2.txt" qui me renvoie cette ligne testé a la main:

fic1 fic2 differ = char45, line2

Voila, maintenant ma question c'est dans un premier temps:

- Générer un rapport_erreur.txt avec :

Les erreurs entre [ fichier1] et [ fichier2 ] sont [ différence ]

les [...] ne sont bien sur pas à écrire en dur mais récolté les infos grâce au script précédent.

J'espère que j'ai été clair...
ghostrider95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 13h17   #5
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Code :
1
2
3
4
5
6
7
8
 $ cat test1.txt
AZERTY=AZERTY,QWERTY=QWERTY
AZERTY=QWERTY,QWERTY=AZERTY
$ cat test2.txt
AZERTY=AZERTY,QWERTY=QWERTY
AZERTY=QWERTY,QWYERTY=AZERTY
$ cmp -b test1.txt test2.txt
test1.txt test2.txt differ: byte 45, line 2 is 105 E 131 Y
Alek-C 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 12h27.


 
 
 
 
Partenaires

Hébergement Web