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 :

Formatage d'une ligne diff


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut Formatage d'une ligne diff
    Bonjour,

    Actuellement je stocke le résultat de mon diff dans un rapport et j'ai un peu formaté le retour pour que celui soit plus joli et plus simple à comprendre.
    Le fichier se présente comme suit :


    #############################################
    #############################################
    Le test CMD_newagate_ACQ_NetN__0008537025.resultat presente les differences suivantes :

    147,148c147,148
    Resultat : <CodeStatutCpltEPC>SFC:10825</CodeStatutCpltEPC>
    Resultat : <LibelleStatutCpltEPC>ERREUR DU MODULE SERVEUR (825) : -ERREUR-</LibelleStatutCpltEPC>
    ---------------
    Modele : <CodeStatutCpltEPC>SFC:10234</CodeStatutCpltEPC>
    Modele : <LibelleStatutCpltEPC>ERREUR DU MODULE SERVEUR (234) : -ERREUR-</LibelleStatutCpltEPC>


    #############################################
    #############################################
    Le test CMD_newagate_ACQ_NetN__0008537025_BCS.resultat presente les differences suivantes :

    147,148c147,148
    Resultat : <CodeStatutCpltEPC>SFC:10841</CodeStatutCpltEPC>
    Resultat : <LibelleStatutCpltEPC>ERREUR DU MODULE SERVEUR (841) : -ERREUR-</LibelleStatutCpltEPC>
    ---------------
    Modele : <CodeStatutCpltEPC>SFC:10250</CodeStatutCpltEPC>
    Modele : <LibelleStatutCpltEPC>ERREUR DU MODULE SERVEUR (250) : -ERREUR-</LibelleStatutCpltEPC>
    Ce qu'il me reste à faire est d'identifier les lignes de type "147,148c147,148" qui représente les lignes où la différence a été détectée ainsi que le type de différence (a, d ou c).
    Une fois la ligne identifiée, je voudrais dire quelle type de différence il y a et sur quelles lignes.
    Je précise que je suis dans un awk, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    diff -rs --ignore-matching-lines='DateStatutOpEPC\|HorodatageMessage'  ${Rep_resultats}/ ${Rep_modeles}/ | (awk '
    	/^Files.+ are identical$/ {
    	   gsub(/^.+\//,"",$(NF-2));
    	   gsub(/.xml/,"",$(NF-2));
    	   print $(NF-2) " : Valid" > Rapport_de_test;
    	   next;
    	}
    	/^diff -rs.+ / {
    	   gsub(/^.+\//,"",$4);
    	   gsub(/.xml/,"",$4);
    	   print " " > Resultat_diff;
    	   print " " > Resultat_diff;
    	   print "#############################################" > Resultat_diff;
    	   print "#############################################" > Resultat_diff; 
    	   print "Le test " $4 " presente les differences suivantes :" > Resultat_diff;
    	   print " " > Resultat_diff;
    	   print $4 " : Failed" > Rapport_de_test;
    	   if (mavar == 0)
    		{
    			mavar=1;
    			print "KO";
    		}
    	   next;
    	}
    	/^[<]+.+/ {
    	   gsub(/^[<]/,"",$0);
    	   print "Resultat : " $0 > Resultat_diff;
    	   next;
    	}
    	/^[>]+.+/ {
    	   gsub(/^[>]/,"",$0);
    	   print "Modele : " $0 > Resultat_diff;
    	   next;
    	}
    	/^---/ {
    	   print "---------------"  > Resultat_diff;
    	   next;
    	}
    	/^[0-9].+/ {
    		print $0 > Resultat_diff;
    	}
    J'ai choisi pour identifier la ligne d'utiliser /^[0-9].+/. Maintenant je ne sais pas comment me débrouiller pour récupérer chaque informations correctement. Sachant qu'il peut être renseigné une seule ligne ou deux (une plage), et que je dois identifier la lettre au centre également.

    Un petit coup de pouce ?

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Est-ce que meld ne serait pas adapté ? Il s'agit d'un diff graphique...
    Nom : meld.jpg
Affichages : 151
Taille : 76,4 Ko

    Ici il me montre que tutu a remplacé titi et que titi a été ajouté en plus...

  3. #3
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Est-ce que meld ne serait pas adapté ? Il s'agit d'un diff graphique...

    Ici il me montre que tutu a remplacé titi et que titi a été ajouté en plus...
    Merci pour la suggestion mais je met en forme un peu avant d'envoyer sous Windows et de créer un PDF.
    De plus, je travail sur un serveur en ligne de commande.
    Il n'est donc pas envisageable d'utiliser un outil graphique

  4. #4
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    J'ai vraiment du mal à utiliser sed, son fonctionnement est vraiment complexe

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nanooby Voir le message
    J'ai vraiment du mal à utiliser sed, son fonctionnement est vraiment complexe
    Si tu sais utiliser vi, alors tu sais utiliser sed.

    En effet, chaque fois que tu appelles une commande bas de page (: ou /) sous vi, ce que tu tapes est alors du pur ed (l'éditeur de base qui a servi de base à vi). Et comme sed n'est qu'un ed en mode "stream"...

    Citation Envoyé par nanooby Voir le message
    Maintenant je ne sais pas comment me débrouiller pour récupérer chaque informations correctement. Sachant qu'il peut être renseigné une seule ligne ou deux (une plage), et que je dois identifier la lettre (a, d ou c) au centre également.
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ info="147,148c149,150"
    lettre=$(echo "$info" |sed -e "s/[^adc]//g")
    $ echo $lettre
    c
    $ plage_deb=$(echo "$info" |sed -e "s/[adc].\{1,\}//g")
    $ echo $plage_deb
    147,148
    plage_fin=$(echo "$info" |sed -e "s/.\{1,\}[adc]//g")
    $ echo $plage_fin
    149,150

  6. #6
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    J'utilise que très peu vi.

    Merci je vais tester cela et le mettre en forme pour mon rapport !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/12/2010, 19h59
  2. [XL-2003] copier coller avec des séparateur puis formatage sur une ligne
    Par kalwin dans le forum Excel
    Réponses: 3
    Dernier message: 17/09/2010, 19h45
  3. [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Par Bleuarff dans le forum Turbo Pascal
    Réponses: 26
    Dernier message: 02/07/2002, 10h08
  4. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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