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 :

envoyer chaque ligne d'un fichier vers une liste de fichiers


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 11
    Points : 20
    Points
    20
    Par défaut envoyer chaque ligne d'un fichier vers une liste de fichiers
    Bonsoir,

    Je dispose d'un fichier dont je souhaiterais envoyer certaines lignes vers un fichier différent. Les fichiers de destination sont listés en ligne au sein d'un autre fichier.
    Y a-t-il un moyen efficace de faire ceci sans parser avec des boucles ?
    J'ai essayé le code suivant mais il se trouve que tous les fichiers de destination contiennent l'intégralité des lignes sélectionnées...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "sentence1" JuliusOutput |tee $(cat uttlist)
    Je recherche toutes les lignes de JuliusOutput contenant le mot "sentence1", le fichier uttlist contenant le chemin des fichiers cibles.

    Merci d'avance

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

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

    Y a-t-il un moyen efficace de faire ceci sans parser avec des boucles ?
    étant donné qu'il faut une redirection par fichier de destination,
    je dirais non.

  3. #3
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Si tu as des délimiteurs logiques ou un manière de déterminer par des critères la plage que tu veux "copier", tu peux faire cela avec gawk.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk -f FichierCommandes $( cat ListeFichiers.txt ) > fichier_resultat.txt

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 11
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    ---------------
    @N_Bah
    étant donné qu'il faut une redirection par fichier de destination,
    je dirais non.
    c'est bien le problème, si tu confirmes qu'il faut une redirection par fichier, alors je n'ai pas le choix. Merci

    ---------------
    @becket
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -f FichierCommandes $( cat ListeFichiers.txt ) > fichier_resultat.txt
    Sauf erreur de ma part, cette commande va générer un seul fichier de sortie (fichier_resultat.txt). Ce que je veux, c'est envoyer chaque ligne sélectionnée par grep vers un fichier (différent à chaque fois) spécifié par uttlist.

    Merci à vous.

  5. #5
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A=$(cat uttlist)
    grep "sentence1" JuliusOutput |tee $A

  6. #6
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par cobaltsixty Voir le message
    Ce que je veux, c'est envoyer chaque ligne sélectionnée par grep vers un fichier (différent à chaque fois) spécifié par uttlist.
    La première ligne correspondante à la recherche est envoyée vers le fichier dont le chemin et le nom se trouvent sur la première ligne du fichier uttlist

    La seconde ligne correspondante à la recherche est envoyée vers le fichier dont le chemin et le nom se trouvent sur la seconde ligne du fichier uttlist

    .. etc ?

    Awk encore et toujours

  7. #7
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par becket Voir le message
    La première ligne correspondante à la recherche est envoyée vers le fichier dont le chemin et le nom se trouvent sur la première ligne du fichier uttlist

    La seconde ligne correspondante à la recherche est envoyée vers le fichier dont le chemin et le nom se trouvent sur la seconde ligne du fichier uttlist

    .. etc ?
    Hum... je ne l'ai pas compris comme ça môa

    Ce que je veux, c'est envoyer chaque ligne sélectionnée par grep vers un fichier (différent à chaque fois) spécifié par uttlist.
    On ne peut pas prévoir à l'avance le nombre de lignes... enfin dans la plupart des cas entends-je


    M'enfin, seul le principal intéressé pourras nous le confirmer...


  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 11
    Points : 20
    Points
    20
    Par défaut
    Salut,

    Citation Envoyé par zipe31 Voir le message
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A=$(cat uttlist)
    grep "sentence1" JuliusOutput |tee $A
    Merci pour la proposition mais c'est le premier truc que j'ai essayé (voir le début de mon post). ça recopie le même contenu (records correspondnant au "pattern") dans tous les fichiers et ce n'est pas ce que je veux malheureusement.

    Bon allez, je continue à chercher...
    Merci encore

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 11
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par becket Voir le message
    Si tu as des délimiteurs logiques ou un manière de déterminer par des critères la plage que tu veux "copier", tu peux faire cela avec gawk.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk -f FichierCommandes $( cat ListeFichiers.txt ) > fichier_resultat.txt
    marche pas non plus ... snif

    J'en ai marre, je vais faire une boucle.

    Merci à tous le deux

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 584
    Points : 19 461
    Points
    19 461
    Par défaut
    KISS, ok, mais 'faut quand même pas abuser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/sentence1/{line=$0; getline file < "uttlist"; print line >file}' JuliusOutput

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 11
    Points : 20
    Points
    20
    Par défaut

    Un grand merci car ça fait exactement ce que je voulais.

    Citation Envoyé par N_BaH Voir le message
    KISS, ok, mais 'faut quand même pas abuser
    Mais pour clarifier les choses, où est l'abus stp ?


    Je manipule la ligne de commande depuis un peu plus de trois mois. Si ma question semble idiote, ainsi soit-il.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 584
    Points : 19 461
    Points
    19 461
    Par défaut
    l'abus est dans l'excès de simplicité
    Keep It Simple Stupid

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

Discussions similaires

  1. Copier un fichier vers une liste donnée dans un fichier
    Par ptitjibus dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 13/12/2014, 21h46
  2. Réponses: 5
    Dernier message: 16/04/2010, 10h10
  3. Comment envoyer un fichier vers une adresse web?
    Par iclic dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/06/2009, 12h00
  4. Réponses: 10
    Dernier message: 12/06/2006, 16h45
  5. Réponses: 4
    Dernier message: 24/04/2003, 22h28

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