IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Comparaison de fichiers


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut Comparaison de fichiers
    Bonjour,
    Besoin de vos lumières car je tourne en rond. J’aimerais faire remonter les différences entre les deux fichiers ci-dessous :

    Fichier file1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    tutu 123
    azerty 454
    toto 45
    qwerty 9879
    titi 789
    tete 7667
    salut 387
    Fichier file2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tutu 123
    toto 6745
    qwerty 9879
    tete 8037
    salut 387
    C’est-à-dire un script qui me dit que « azerty » ne figure pas dans file2, que « toto » est différent dans file2, que « titi » ne figure pas dans file2, etc……

    En revanche j’arrive à sortir les lignes identiques avec le script suivant :

    Script compare.sh :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
    while read line1; do
            while read line2; do
                    if [ "$line2" = "$line1" ]
                    then
                            echo "Les lignes $line1 et $line2 sont identiques"
                            break
                    fi
            done < file2
    done < file1
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Les lignes tutu 123 et tutu 123 sont identiques
    Les lignes qwerty 9879 et qwerty 9879 sont identiques
    Les lignes salut 387 et salut 387 sont identiques
    J’aimerais plutôt faire ressortir les différences et pas les analogies.

    Avez-vous une évolution de mon script à me proposer ?

    Merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut
    J’arrive à contourner la chose en rajoutant :
    sed -i/$line1/d” file2 juste après le echo.
    Du coup dans file2 il me reste uniquement les lignes différentes(c’est bien) mais il ne me dit pas que azerty ne figure pas dans file2.
    En fait ma première colonne correspond à des noms de fichiers et la seconde leur taille.

  3. #3
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Il s'agit d'un exercice je suppose ?
    Si non, il existe la commande diff qui est faite pour ça.

  4. #4
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    C'est quoi les contraintes de l'exo ? quels langages, commandes, etc. as-tu le droit d'utiliser ?
    Sinon diff a de nombreuses options de mise en forme de sa sortie, et il existe des variantes de cette commande, comme sdiff, elle-même munie d'options de formatage.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ sdiff -s file1 file2
    azerty 454						      |	toto 6745
    toto 45							      <
    titi 789						      |	tete 8037
    tete 7667						      <

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut
    Les contraintes : faire un script Shell mais je peux utiliser ce que je veux du moment que ça marche.

    L’objectif est de comparer la même arborescence sur deux serveurs différents, un des serveurs (le 1) est la référence.

    Donc j’ai réussi à créer 2 fichiers formatés de la même manière :
    - un de référence (file1)
    - un second (file2) qu’il faut comparer à cette référence file1 afin de faire ressortir les fichiers de taille différente et ceux qui existent sur la référence mais pas dans l’autre.

    Format des deux fichiers :
    - 1ere colonne : nom de fichier.
    Dans mon exemple dans un souci de simplicité je fais ressortir le dernier qualifieur avec un basename mais idéalement si on peut gérer l’arborescence c’est bien mieux.
    - seconde colonne : la taille.

    Et on compare les deux fichiers et on alerte.

  6. #6
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Bah si t'as le droit d'utiliser n'importe quelle commande, autant tout faire dans awk pour une comparaison de ce genre.
    Mais sinon, s'il s'agit vraiment de comparer deux arborescences, tu pourrais le faire via rsync par exemple.
    Selon tes critères, ça donnerait quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rsync -rv --size-only --dry-run /chemin1/ /chemin2
    (attention au / final dans /chemin1/, pour comparer ce qui se trouve sous /chemin1/ et sous /chemin2/)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparaison de fichiers text
    Par mick84m dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 22/07/2005, 17h48
  2. [Debutant(e)]comparaison de fichier : imprimer
    Par demostene dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 06/07/2004, 11h43
  3. Comparaison de fichiers Word
    Par Zelphalya dans le forum Langage
    Réponses: 5
    Dernier message: 20/10/2003, 16h15
  4. [langage] Comparaison de fichiers
    Par Jibees dans le forum Langage
    Réponses: 3
    Dernier message: 23/04/2003, 17h27
  5. Comparaison de fichier
    Par danzerg dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 12h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo