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 :

Récupérer une variable dans un fichier par rapport à l'emplacement d'une autre


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Points : 26
    Points
    26
    Par défaut Récupérer une variable dans un fichier par rapport à l'emplacement d'une autre
    Bonjour,

    je suis à la recherche d'un moyen, dans un script en bash, d'aller chercher un mot dans un fichier, par ex. 'debit', et de récupérer la valeur positionnée 4 lignes plus bas que ce mot mais pas dans la même colonne, par ex 2ieme valeur en partant de la gauche), et ce, plusieurs fois de suite dans le même fichier.
    Je bloque principalement sur la gestion du positionnement par rapport au mot 'debit'. Vous avez une idée d'une commande pour cela?

    Merci d'avance.

    Flo

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par FlorianBreizh Voir le message
    Bonjour,

    je suis à la recherche d'un moyen, dans un script en bash, d'aller chercher un mot dans un fichier, par ex. 'debit', et de récupérer la valeur positionnée 4 lignes plus bas que ce mot mais pas dans la même colonne, par ex 2ieme valeur en partant de la gauche), et ce, plusieurs fois de suite dans le même fichier.
    Je bloque principalement sur la gestion du positionnement par rapport au mot 'debit'. Vous avez une idée d'une commande pour cela?

    Merci d'avance.

    Flo
    Bonsoir

    De tête:
    grep -b "debit" fichier => te donnera les n° de lignes contenant le mot "débit"
    Avec ces n° de lignes tu peux utiliser head -x (le n°) |tail -1 => tu auras la ligne n° x (ou x+4 si tu fais la transformation qui va bien).
    De là tu passes un petit cut -f2 et tu auras la 2° valeur de cette ligne située 4 lignes sous celles contenant le mot "debit"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ cat > toto
    aaaa
    bbbb
    cccc
    dddd
    eeee 4 5 6 7
    $
    $ sed  -n '/aaaa/{n;n;n;n;p;}' toto | awk '{print $3}'
    5
    $
    c'est le print $x dans le awk qui te donne ton n° de colone
    et le nombre de n; dans le sed qui permet de chopper la ligne...

    donc la en X,Y ca donne 3,5

    y'a mieux mais cette méthode est compréhensible facilement

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Points : 26
    Points
    26
    Par défaut
    Merci pour vos deux réponses.

    Pour la première, ca marche avec grep -n mais cette commande affiche toute la ligne. Du coup, ca rajoute une étape pour extraire effectivement le numéro de ligne. mais ca devrait marcher. Merci.

    J'ai une petite préférence pour la solution avec sed mais est-il possible de passer les n en paramètre, un truc du genre n*6 pour faire un script complètement autonome avec lignes et colonnes en paramètres?

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

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

    Citation Envoyé par FlorianBreizh
    est-il possible de passer les n en paramètre
    ce serait plus évident en awk, à mon goût.
    du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -v nbl=6 '/match/{n=1;while(n < nbl){getline; n++}...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    awk me semble a priori effectivement plus approprié mais serait-il possible d'avoir un échantillon représentatif du fichier à traiter?
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    peut-être plus lèger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nombre2lignes= #c'est toi qui décide
    awk -v nbl=$nombre2lignes '/match/{ln=NR};NR==ln+nbl{print $3}'
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    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,

    Peut être plus lourd, sûrement beaucoup plus indigeste, mais juste pour le fun...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ cat toto
    aaaa 
    bbbb
    cccc
    dddd
    eeee 4 5 6 7
     
    $ li=4;ch=2
     
    $ sed -n '/aaaa/,+'"${li}"'{${s/\([^ ]* \)\{'"${ch}"'\}\([^ ]*\) .*/\2/p}}' toto 
    5
    Bon appétit
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Points : 26
    Points
    26
    Par défaut
    , Merci à tous pour vos éléments!

    Y'a tellement de possibilités que je ne sais pas laquelle choisir,

    Merci encore

    Florian

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    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 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Si je puis me permettre, choisis celle que tu (ou ton suivant) auras le moins de mal à comprendre, voire faire évoluer!

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

Discussions similaires

  1. [XL-2010] Rechercher et récupérer le nom d'un fichier par rapport à la valeur d'une cellule
    Par froggy39 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/07/2014, 11h15
  2. Récupérer une variable dans un fichier php
    Par totof49 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 27/03/2009, 14h15
  3. Réponses: 9
    Dernier message: 21/05/2007, 00h33
  4. modifier une variable dans un fichier
    Par Guismay dans le forum Langage
    Réponses: 7
    Dernier message: 11/09/2005, 19h46
  5. Réponses: 13
    Dernier message: 14/06/2003, 22h15

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