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 :

[Bash] Extraction de chaines dans des sous-fichiers


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 47
    Points : 12
    Points
    12
    Par défaut [Bash] Extraction de chaines dans des sous-fichiers
    Bonjour à tous,

    Je me permets de vous contacter ne trouvant pas la solution à mon problème.
    j'ai un gros fichier concaténant plusieurs fichiers. Chacun des fichiers semble commencer par LOCUS et se terminer par //.
    Pour chacun de ces fichiers je veux extraire 4 chaînes de caractères, voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    motif=("/trait", "trait", "/pays", "pays")
    for i in ${motif[@]};do while read line;do grep -w $i;done < fichier; done
    j'affiche ce que je veux mais pas dans la bonne configuration, je m'explique. En gros pour chacun de mes sous-fichiers délimités par LOCUS.......// je veux afficher ces 4 motifs (ou moins car ils ne sont pas tous forcément présent à chaque fois)
    Mais dans mon code je ne sais pas comment introduire cette délimitation.

    Merci beaucoup

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    Bonjour,

    ton code n'est pas fonctionnel, je ne vois pas comment tu peux obtenir quoi que ce soit avec:
    un tableau n'est pas assigné de cette manière (le virgules sont en trop)
    grep ne traite rien (aucun fichier n'est indiqué); c'est bloquant.

    tu ne peux pas recréer les fichiers ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 47
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Sincèrement désolé pour la confusion. Voici un autre exemple avec un code qui fonctionne et un fichier test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    motif=("/breed=" "breed:" "/haplotype=" "/country=")
    for i in ${motif[@]};do while read line;do grep -w $i;done < test.txt; done
    Il y a que trois sous fichiers mais l'idée serait d'afficher chacun des motifs sur une même ligne pour tous les sous fichiers.

    Merci et encore désolé pour le manque de clareté
    Fichiers attachés Fichiers attachés

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 47
    Points : 12
    Points
    12
    Par défaut
    Désolé dernière rectification, ici l'exemple serait mieux avec haplogroupe au lieux d'haplotype dans les motifs.
    Encore merci pour votre aide

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ sed -n '/LOCUS/,\@//@{\@/breed=\|breed:\|/haplogroup=\|/country=@H;\@//@{x;s@//@@;s/\n//gp}}' Piotree.dvp.test.txt 
                         /note="breed: White Park"
                         /note="breed: White Park"
                         /haplogroup="T3"                     /country="Italy"                     /note="breed: Italian Red Pied"
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 47
    Points : 12
    Points
    12
    Par défaut
    canon merci beaucoup mais il va falloir que je décortique tout ça je suis pas hyper à l'aise avec sed.

    Encore merci

  7. #7
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    une autre solution, à base de awk :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk '/^LOCUS/ {s=""} /breed:|\/(breed|haplogroup|country)=/ {s=s $0} /\/\// {print s}' test.txt
                         /note="breed: White Park"
                         /note="breed: White Park"
                         /haplogroup="T3"                     /country="Italy"                     /note="breed: Italian Red Pied"

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 47
    Points : 12
    Points
    12
    Par défaut
    Salut,

    Merci beaucoup pour cette autre façon de procéder.

    A bientôt

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/10/2017, 21h37
  2. Macro dans des sous fichiers.
    Par karyo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/03/2012, 14h18
  3. Extraction de chaine dans un fichier
    Par Sakapatate dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 31/05/2007, 21h13
  4. Recherche de fichiers dans des sous répertoires
    Par Mimi Bulles dans le forum Langage
    Réponses: 8
    Dernier message: 25/04/2006, 16h41
  5. Chemin d'accès des fichiers dans des sous rep
    Par Le Veilleur dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/11/2004, 14h37

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