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

Linux Discussion :

Répupérer plusieurs lignes pour les mettre en 1 seule


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut Répupérer plusieurs lignes pour les mettre en 1 seule
    Bonjour,

    J'ai un fichier de listing de compilation qui ressemble à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ---- HP9000s700/68K Alsys Ada compiler 5.5.3 ---------------------------------------------------------------------------------------
     
    Options     : SOURCE="/chemin/rechemin/file.ads",ANNOTATE=
                  "0",ERRORS=30,LEVEL=UPDATE,CHECKS=STACK,GENERICS=INLINE,MEMORY=500,OUTPUT="/chemin/rechemin/file.las",
                  WARNING=YES,TEXT=YES,SHOW=ALL,DETAIL=RUNTIME,ASSEMBLY=ALL,INLINE=PRAGMA,REDUCTION=NONE,EXPRESSIONS=NONE,OBJECT=
                  NONE,TREE=YES,DEBUG=YES,COPY=NO,EDIT=NONE
     
                                                                                                         Next message at line:  Global.
    ------------------------------------------------------------------------------------------------------------------------------------
    Puis le fichier continue
    Je voudrais pouvoir mettre les 4 lignes après option sur une seule ligne.

    En gros, je voudrais supprimer les retours charriots entre La première ligne qui commence par "Options" et la ligne qui précède ou la ligne qui contient "Next message at line : Global."

    Dans un premier temps, j'ai essayé de faire un sed pour récupérer les parties entre Options et next ...

    Mais j'y suis pas arrivé.

    J'avais pensé aussi trouver le numéro de ligne dans le fichier de la ligne option et celui de de la ligne Next message ...

    Mais la aussi, j'ai pas trouvé
    (je pensais ensuite avec des head et tail récupérer que cette partie, supprimer les retour charriot et les espaces et tabulation par des sed et donc tout serait sur une même ligne).

    Auriez vous des conseils à me donner ?


    Je vous remercie par avance.
    @+

  2. #2
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Bon, j'ai déjà trouvé une étape :

    sed -n '/Options/=' file.ext | head -n 1

    Me retourne le numéro de la ligne où apparait la première fois le texte Options

    Donc maintenant, je doit savoir récupérer les lignes comprises entre mes 2 tags

    Maintenant, il me reste à trouver comment mettre ces 4/5 lignes sur une seule ligne

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Maintenant, pour mettre tout sur une seule ligne, j'ai trouvé que ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tr -d '\n' < filedetest > fileresult

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    maintenant, je supprime les tabulations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tr -d '\t' < fileresult >fileresult2
    puis les espaces

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tr -d '[:space:]' < fileresult2 > fileresult3
    Et enfin les carateres nuls :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tr -d '\0' < fileresult3 > fileresult4
    Bon, il me reste plus qu'a recomposer mon fichier.

    Aurriez vous une solution plus rapide, plus élégante ?

    Merci

  5. #5
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Il y a sans doute mieux avec sed, mais je ne suis pas un expert
    http://www.student.northpark.edu/pem...ed/sedfaq.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/Options/,/Next/{ /Next/b; s/\t//g; s/ //g; p } ' liste.txt | tr -d '\n'

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Bonjour,
    Je te remercie de ta réponse, c'est trés sympa, mais peux tu m'expliquer ton code.

    Merci

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Autre précision, je suis sous unix et donc je n'utilise pas le sed gnu.

    La commande que tu me donne me retourne cette erreur :
    sed: The label /Options/,/Next/{ /Next/b; s/\t//g; s/ //g; p } is greater than eight characters.

  8. #8
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Solution awk : c'est pas du compact, mais c'est plus lisible
    http://www.shellunix.com/awk.html


    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
     
    awk '
    {
    	if ($0 ~ /^Options/) {
    		gsub(/[\t ]/,"",$0) #-- Elimination des <Tab> et des espaces
    		printf("%s",$0)     #-- ecriture ligne sans NewLine
    		while (getline > 0) {
    			if ($0 ~ /Next message/) {
    				print "" #-- ecriture NewLine
    				exit     #-- Sortie de procédure
    			}
    			gsub(/[\t ]/,"",$0)
    			printf("%s",$0)
    		}
    	}
    } ' liste.txt
    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Options:SOURCE="/chemin/rechemin/file.ads",ANNOTATE="0",ERRORS=30,LEVEL=UPDATE,CHECKS=STACK,GENERICS=INLINE,MEMORY=500,OUTPUT="/chemin/rechemin/file.las",WARNING=YES,TEXT=YES,SHOW=ALL,DETAIL=RUNTIME,ASSEMBLY=ALL,INLINE=PRAGMA,REDUCTION=NONE,EXPRESSIONS=NONE,OBJECT=NONE,TREE=YES,DEBUG=YES,COPY=NO,EDIT=NONE

Discussions similaires

  1. [MySQL] Recupérer plusieurs $POST pour les mettre dans une table
    Par gastoncs dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/06/2010, 20h56
  2. Plusieurs lignes pour une sous-requête (erreur #1242)
    Par Sieldev dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/08/2007, 01h21
  3. Plusieurs styles pour les liens
    Par oranoutan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 11/01/2006, 11h49
  4. Réponses: 2
    Dernier message: 21/09/2005, 12h18

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