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 :

Extraction des champs d'une phrase


Sujet :

Shell et commandes GNU

  1. #1
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut Extraction des champs d'une phrase
    Bonjour

    J'ai un fichier contenant des ligne sous cette forme là :

    une phrase composé de 6 mot -> n mots (valeur)

    par exemple :

    au sujet de l article card -> your advice about rule (0.000000082860230)
    au sujet de l article card -> would therefore like some que cupcakes (0.000000082860230)

    J'aimerai extraire ces deux champs là dans un fichier resultat :
    au sujet de l article card 0.000000082860230
    au sujet de l article card 0.000000082860230

    (faut pas extraire les parentheses)

    J'ai essayé avec cette commande mais ca na pas marché

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    do echo "$line" | sed -e 's/->.*(//' -e 's/)$//' # >> out.txt done < in.txt
    Avez vous une idee svp?

    Merci

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

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

    pour moi, ça marche.
    la boucle est inutile : sed sait traiter les fichiers (et, ce, sans redirection)

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 302
    Points : 12 800
    Points
    12 800
    Par défaut
    Bonjour,

    Ce qui peut poser problème, c'est que dans le fichier originale, la fin de ligne n'est peut-être pas juste après ta parenthèse fermante.

  4. #4
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    bonjour
    oui il m'affiche ce message :

    do echo "$line" | sed -e 's/->.*(//' -e 's/)$//' # >> output done < in
    bash: Erreur de syntaxe près du symbole inattendu « do »

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    En perl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -i -pE 's/->.*\(|\)//g' fichier.txt

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 585
    Points : 19 465
    Points
    19 465
    Par défaut
    do fait partie d'une commande composée, telle que for, while/until, ou select.
    la prochaine fois, tu détailleras le «ça marche pô» !

  7. #7
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Ca marche, merci Philou

  8. #8
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Bonjour

    Je suis devant un autre souci de meme type

    J'ai un fichier sous cette forme
    m mot -> n mots (valeur)

    j'aimerai extraire les regles qui ont à droite de la fleche i mot et à gauche de la fleche j mot

    par exemple
    au sujet de l article card -> would therefore like some que cupcakes (0.000000082860230)
    au sujet de l article card card -> would therefore like some que cupcakes (0.000000082860230)
    lutilisateur tape i = 6 et j= 4
    alors le programme doit afficher seulement
    au sujet de l article card -> your advice about rule (0.000000082860230)
    Une idee svp?

    Merci

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 851
    Points
    5 851
    Par défaut
    Bonjour.

    Est-ce que tu souhaites qu'on fasse le programme à ta place?
    (et, si oui, à quel tarif? )

    As-tu essayé quelque chose?

    Sinon, vu que tu demandes une idée, il me semble que les grandes lignes pourraient être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Pour chaque ligne,
      extraire la chaîne avant le '->'
      compter le nombre de mots
      comparer avec la valeur demandée
      extraire la chaîne entre '->' et '('
      compter le nombre de mots
      comparer avec la valeur demandée
      le cas échéant, retourner la ligne complète (ou ce que tu veux de la ligne complète)
      passer à la ligne suivante

  10. #10
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Bonjour.

    Est-ce que tu souhaites qu'on fasse le programme à ta place?
    (et, si oui, à quel tarif? )
    Je demandais juste une idée gratos (je plaisante)

    Sinon, merci pour la piste

  11. #11
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Toujours en uniligne, ça pourrait se faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    perl -nE '($left, $right) = split /\s*(?:->|[()])\s*/;print if split(/\s+/, $left) == 6 && split(/\s+/, $right) == 4' fichier.txt
    Il suit l'algo proposé par Jack.

  12. #12
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Ca marche
    Merci Philou

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 26/02/2013, 11h53
  2. extraction des champs d'une table SQL?
    Par nabilG dans le forum C#
    Réponses: 2
    Dernier message: 06/03/2009, 13h49
  3. nom des champs d'une table
    Par K-ZimiR dans le forum Requêtes
    Réponses: 6
    Dernier message: 22/04/2004, 14h21
  4. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09
  5. Ordre des champs dans une table
    Par patapetz dans le forum Outils
    Réponses: 5
    Dernier message: 30/07/2003, 06h53

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