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 :

[awk] Récupérer une commande system dans un awk


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Août 2004
    Messages : 24
    Points : 21
    Points
    21
    Par défaut [awk] Récupérer une commande system dans un awk
    Bonjour à tous,

    Alors, j'ai un petit problème concernant un awk.
    Je n'arrive pas à récupérer le résultat de la commande system à l'interieur de mon awk.
    Le résultat s'affiche correctement à l'écran mais je n'arrive pas à la récupérer dans ma variable Lun.

    Voici un bout de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    awk '
    {        if ( $3 ~ /sd*/ && Lbaie ~ TypeBaie )
                    {
                    Disk[$i] = $3
                    Path[$3] = Lpath
    
                    #Recupere le nom de lun par rapport au disque
                    Lun = system("scsiinfo -i /dev/"Disk[$i]" |grep Revision 
                           |cut -c 29-42")
    
                    print Path[Disk[$i]]" "Disk[$i]" "Lun
                    }
    } '
    Ai-je fait une erreur? ou est-ce tout simplement impossible?


    Une petite question en passant:
    Pour le awk : Peut-on imbriquer des awk comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    awk'{ 
    blabla
    blabla
    val= (awk'{balbla}' fichier)
    blabla
    }'fichier
    Pour info:
    OS: Linux
    Shell : Ksh
    Programmeur: toujours débutant

  2. #2
    Membre confirmé Avatar de alexp
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    459
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 459
    Points : 532
    Points
    532
    Par défaut
    pour le cut tu peux alléger ta commande en faisant comme ceci :
    ce qui signifie que tu veux garder la plage de caractère compris entre les caracteres n°29 et 42

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Août 2004
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Oui je viens de m'en rendre compte, je modifiais ma question pendant que tu répondais, trop rapide sur ce coup
    Merci quand même pour l'aide Alexp.

    Par contre, le coeur de mon problème reste d'actualité.

  4. #4
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Je te suggère de regarder ce lien.
    La réponse à ta question s'y trouve

    http://www.developpez.net/forums/sho...d.php?t=408624

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Août 2004
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    En effet j'ai trouvé de bonne choses sur ce sujet (shame on me, je ne l'avais pas trouvé dans ma recherche... )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if ( $3 ~ /sd*/ && Lbaie ~ TypeBaie )
    {
    Disk[$a] = $3
    Path[$3] = Lpath
    cmd=("scsiinfo -i /dev/"Disk[$a]" |grep Revision |cut -c 32-42")
    cmd|getline
    Lun=$0
    close(cmd)
    print Path[Disk[$a]]"  "Lun"      "Disk[$a]
    a++
    }
    Par contre la ligne " cmd|getline " me pose problème... j'ai l'impression que ça me fait sauter également des lignes dans mon awk... (je perds des enregistrements $1, $2,... de mon awk principal alors que je les ai encore lors du passage de la commande).
    Voyez-vous une erreur de synthaxe quelque part? Sinon je vais essayer de chercher encore un peu

    Au fait, ma question sur les awk imbriqués est toujours d'actualité, si vous avez une idée, je suis preneur

  6. #6
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Idem, entre temps, cette question a été posée et la réponse donnée

    http://www.developpez.net/forums/sho...d.php?t=408624

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Août 2004
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    La réponse n'y est pas, je sauvegardais déjà mes variables dans des autres variables. Mon erreur venais du fait que je les sauvais dans des tableaux et apparemment ça posait problème...

    Mais bon, j'ai put passer outre et j'ai réussi à faire ce que je voulais

    Et pour les awk imbriqués, est-ce possible?
    Le problème est qu'il a du mal avec les " ' ". Dès qu'il en croise un il le prend pour lui. Peut-on faire autrement?

  8. #8
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Août 2004
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Edit : Désolé, l'edit du post précédent a foiré...

  9. #9
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    [QUOTE=zebulon90;2492304]
    Une petite question en passant:
    Pour le awk : Peut-on imbriquer des awk comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    awk'{ 
    blabla
    blabla
    val= (awk'{balbla}' fichier)
    blabla
    }'fichier
    [QUOTE]


    Pour ton awk encapsulé dans un 1er awk tu peux éviter le problème des simple-quotes en mettant les instructions awk dans un fichier comme ci-dessous ( option -f )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cmd=("awk -f FicAwkCmd fichier")
    cmd|getline

  10. #10
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Août 2004
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    A vi j'y avais pas pensé!

    Je m'en vais essayer ça de suite. Merci pour ton aide BlaireauOne

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/09/2010, 15h15
  2. Réponses: 3
    Dernier message: 19/06/2007, 12h27
  3. affichage date systeme dans un awk
    Par arezki76 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 03/06/2007, 00h13
  4. Réponses: 5
    Dernier message: 16/03/2007, 13h16
  5. Utilisez des variables dans une commande system()
    Par Invité1 dans le forum C++
    Réponses: 2
    Dernier message: 05/01/2007, 23h54

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