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 :

Afficher un intervalle entre 2 motifs


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 80
    Par défaut Afficher un intervalle entre 2 motifs
    Bonjour,

    J'ai utilisé l'expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n /^D/,/^F/'p' fic_in > fic_out
    pour extraire les enregistrements compris entre la ligne qui débute par D et celle qui débute par F.

    Si j'ai le cas d'un fichier "fic_in"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DLIGNE01.....
    LIGNE02.......
    LIGNE03.......
    LIGNE05..........
    FLIGNE06.......
    DLIGNE07.....
    LIGNE08.......
    LIGNE09.......
    LIGNE10..........
    FLIGNE11.......
    Le problème est que le résultat obtenu avec le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n /^D/,/^F/'p' fic_in > fic_out
    équivaut au contenu du fichier "fic_in". Autrement dit, le fic_out est identique à fic_in (rien de surprenant compte tenu du code).

    Ce que je cherche à faire, c'est avoir deux fichiers pour le coup :

    fic1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DLIGNE01.....
    LIGNE02.......
    LIGNE03.......
    LIGNE05..........
    FLIGNE06.......
    fic2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DLIGNE07.....
    LIGNE08.......
    LIGNE09.......
    LIGNE10..........
    FLIGNE11.......
    Cette manière de faire va me permettre ensuite de rejeter les fichiers qui ne respectent pas la règle : entête doit toujours commencée par D et la fin du fichier par F. Ce qui peut correspondre au code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    D=`head -1 fic1 | cut -c 1-1`
    F=`tail -1 fic1 | cut -c 1-1`
    if [[ ${D} == "D" ]] && [[ ${F} == "F" ]] 
      then 
           "Fic à garder"
      else
            "Fic à rejeter"
    fi
    Avez-vous une idée ?
    Merci infiniment pour votre aide.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    Je ne suis pas certain d'avoir tout compris :
    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
    #!/bin/bash
     
    while read line
    do if [[ $line == D* ]]
       then <s>((flag)) && unset text</s>  #ça ne sert à rien : text="$line" écrase $text
            flag=1
            text="$line"
       elif ((flag))
       then text+=$'\n'"$line"
            if [[ $line == F* ]]
            then unset flag
                 echo "$text" >fic$((++n))
            fi
       fi
    done <fichier.in
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 80
    Par défaut
    Merci

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

Discussions similaires

  1. Durée - Intervalle entre 2 dates
    Par lilou77 dans le forum SQL
    Réponses: 5
    Dernier message: 27/03/2014, 10h57
  2. Intervalle entre deux dates
    Par ecirb dans le forum InfoPath
    Réponses: 15
    Dernier message: 22/03/2007, 10h39
  3. Tester un chevauchement d'intervalle entre 2 dates
    Par Tchupacabra dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/03/2007, 11h53
  4. [Dates] intervalles entre deux timestamp
    Par maysa dans le forum Langage
    Réponses: 7
    Dernier message: 15/12/2005, 20h37
  5. [Relations] afficher les relations entre 2 tables
    Par dzincou dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 14/01/2004, 17h07

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