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 et mise en argument


Sujet :

Shell et commandes GNU

  1. #21
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 935
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 935
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Tu peux nous donner l'OS ?

    Et le résultat de la commande suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LISTE /tmp/RESS | od -c
    Sinon, un autre sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '1{x;s/.*/x/;x;};/EX[[:space:]=]*/{x;s/x//;x;t;s/.*[[:space:]=]//p;q;}' /tmp/RESS
    Ici, on récupére la 2ème ligne 'EX =', mais si on veut récupérer la 3ème, suffit juste de modifier:
    en
    En gros, dans cette partie on met autant de 'x' que le nombre de EX à ne pas prendre en compte.
    Salut disedorgue, c'est sur de l'UNIX, mais j'ai aussi besoin que la commande fonctionne sur du linux car on a les deux type d'OS.
    Je vous donnerai demain le résultat de la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LISTE /tmp/RESS | od -c
    et même temps je testerai les autres propositions, notamment le sed.

  2. #22
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par sam01 Voir le message
    c'est sur de l'UNIX, mais j'ai aussi besoin que la commande fonctionne sur du linux car on a les deux type d'OS.
    Dans ce cas, il vaut mieux utiliser le forum Shell et commandes POSIX qui est dédié aux questions relatives aux scripts qui doivent être portables.

  3. #23
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 379
    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 379
    Par défaut
    Je suis d'accord avec jlliagre car en général le portage vers linux est plus simple et quasi-immédiat.

    Et des précisions sur le type de l'UNIX en question ne serait pas de trop non plus...

  4. #24
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 935
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 935
    Par défaut
    Bonjour à tous, me revoilà .
    La commande avec

    me donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    0000000   \n   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
    0000020    *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
    *
    0000100    *  \n  \n   A   f   f   i   c   h   a   g   e       d   e
    0000120    l   a       l   i   s   t   e       d   e   s       r   e   s
    0000140    s   o   u   r   c   e   s       p   a   r       c   h   a   i
    0000160    n   e  \n  \n   *   *   *   *   *   *   *   *   *   *   *   *
    0000200    *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
    *
    0000260    *   *   *   *  \n
    0000265
    j'ai testé avec les nouveaux sed que vous m'avez fourni mais rien ne s'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    LISTE /tmp/RESS|sed -n '1{x;s/.*/x/;x;};/EX[[:space:]=]*/{x;s/x//;x;t;s/.*[[:space:]=]//p;q;}'
     
    LISTE /tmp/RESS|sed -n '1{x;s/.*/x/;x;};/[[:space:]]*EX[[:space:]=]\+/{x;s/x//;x;t;s/^[[:space:]]*EX[[:space:]=]\+//p;q;}'
    tout cela me renvoie aucune valeur.

    Voici le résultat de la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    uname -a
    AIX CDRATE01 2 7 00FAB3114C00

  5. #25
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    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 103
    Par défaut
    Citation Envoyé par sam01 Voir le message
    La commande avec od -c me donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    0000000   \n   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
    0000020    *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
    *
    0000100    *  \n  \n   A   f   f   i   c   h   a   g   e       d   e
    0000120    l   a       l   i   s   t   e       d   e   s       r   e   s
    0000140    s   o   u   r   c   e   s       p   a   r       c   h   a   i
    0000160    n   e  \n  \n   *   *   *   *   *   *   *   *   *   *   *   *
    0000200    *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
    *
    0000260    *   *   *   *  \n
    0000265
    Comme le soupçonnait disedorgue, le problème n'est pas dans le script mais dans tes données puisque la sortie de LISTE /tmp/RESS ne contient pas de ligne "EX =", mais affiche en tout et pour tout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    *********************************
     
    Affichage de la liste des ressources par chaine
     
    *********************************
    tout cela me renvoie aucune valeur.
    Normal (voir remarque précédente)...

    Voici le résultat de la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    uname -a
    AIX CDRATE01 2 7 00FAB3114C00
    Là, on n'est clairement pas sur du linux mais sur de l'AIX!
    Du coup, les commandes GNU linux (awk, sed, etc.) risquent fort de ne pas marcher.
    Comme dit jiliagre:
    Citation Envoyé par jlliagre Voir le message
    Dans ce cas, il vaut mieux utiliser le forum Shell et commandes POSIX qui est dédié aux questions relatives aux scripts qui doivent être portables.

  6. #26
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 935
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 935
    Par défaut
    ok, merci pour l'info, mais rassue moi, les commande awk et sed existent bien sur de l'AIX ? Ce n'est pas exclusif à du linux...

    mais ce qui est bizarre, c'est que la commande me renvoi bien le résultat entier ... là j'avoue que je suis perdu...

  7. #27
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 935
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 935
    Par défaut
    Re, ça y est je viens de comprendre.
    Je suis vraiment désolé, c'est de ma faute, j'ai oublié de changer le mot EX par RESSOURCE car dans ma commande d'origine, c'est le mot RESSOURCE qu'il faut rechercher et non le mot EX.
    Du coup, la toute première proposition de disedorgue fonctionne parfaitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk '/RESSOURCE *=/ && ++flag == 2 {print $NF}'
    je suis vraiment désolé.

    Par contre, il est possible que le "pavé apparaissent plusieurs fois (2, 3 4...) et je ne sais pas à l'avance combien de "pavé" il y aura :

    exemple du résultat de la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    ****************************************************************
     
    Affichage de la liste des ressources par chaine
     
    TYPE = XBW
     
            RESSOURCE =                                        FFFF
            VERROU    =                                            S
            DATE      =                                     20170615
            HEURE     =                                       110145
     
            RESSOURCE =                                     AAAAAAA
            VERROU    =                                            X
            DATE      =                                     20170615
            HEURE     =                                       110145
     
    TYPE = QSB
     
            RESSOURCE =                                        FFFF
            VERROU    =                                            S
            DATE      =                                     20170615
            HEURE     =                                       074614
     
            RESSOURCE =                                     BBBBBBB
            VERROU    =                                            X
            DATE      =                                     20170615
            HEURE     =                                       074614
     
    TYPE = XFB
     
            RESSOURCE =                                        FFFF
            VERROU    =                                            S
            DATE      =                                     20170615
            HEURE     =                                       083544
     
            RESSOURCE =                                     CCCCCC
            VERROU    =                                            X
            DATE      =                                     20170615
            HEURE     =                                       083544
     
    ****************************************************************
    du coup, j'ai besoin de récupérer :AAAAAAA, BBBBBB et CCCCCC.

    Une chose importante, je ne sais pas à l'avance combien je vais avoir de "pavé" TYPE

  8. #28
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par sam01 Voir le message
    ok, merci pour l'info, mais rassure moi, les commande awk et sed existent bien sur de l'AIX ? Ce n'est pas exclusif à du linux...
    Awk et sed sont des commandes standard Unix, et existent donc sous AIX et tous les autres Unix. Ce qui n'est pas disponible, ce sont les extensions apportées par l'implémentation de ces mêmes commandes par GNU.
    Il est en revanche possible que les commandes GNU soient elles-aussi disponibles sur ton Unix, soit dans un répertoire différent avec le nom standard, soit avec un nom indiquant leur origine, comme gawk, gsed etc.

  9. #29
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 379
    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 379
    Par défaut
    Donc, si je comprends bien ta nouvelle spec:

    Pour chaque bloc TYPE, retourner la valeur de la 2éme occurrence de RESSOURCE.

    Est-ce bien ça ?

    Et cette récupération, on la retourne au coup par coup, donc 1 ligne pour chaque occurrence ou une seule ligne avec toutes les occurrences ?

    Est-ce que le sed que je t'ai fourni fonctionne pour une occurrence si tu remplaces les 'EX' par 'RESSOURCE' ?

    Mais bon, pour le awk et le sed (s'il fonctionne) le boulot est quasi fait si la spec est celle citée: suffit juste de réinitialiser les compteurs quand on détecte la ligne "TYPE".

  10. #30
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    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 103
    Par défaut
    Citation Envoyé par sam01 Voir le message
    Du coup, la toute première proposition de disedorgue fonctionne parfaitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/RESSOURCE *=/ && ++flag == 2 {print $NF}'
    du coup, j'ai besoin de récupérer :AAAAAAA, BBBBBB et CCCCCC.
    Si, à chaque fois, il y a 2 ressources et que tu veux la 2ème, il suffit de remettre le compteur à 0:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/RESSOURCE *=/ && ++flag == 2 {print $NF; flag = 0}'

  11. #31
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 935
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 935
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Donc, si je comprends bien ta nouvelle spec:



    Et cette récupération, on la retourne au coup par coup, donc 1 ligne pour chaque occurrence ou une seule ligne avec toutes les occurrences ?
    Salut c'est une bonne question car mon but est de passer la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ps -edf|grep MS|grep "$mot"
    pour chaque mot trouvé.

  12. #32
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 379
    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 379
    Par défaut
    Bah, déjà, si tu nous disais ce qui fonctionne comme solutions ( donnée ici ou ailleurs ) et ce qui ne fonctionne pas...

    Ensuite, on verra laquelle garder et comment l'intégrer dans ta ligne.

  13. #33
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 935
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 935
    Par défaut
    Salut disedorgue, regarde mon poste plus haut, je vous ai dit que la méthode que tu as donnée avec le awk fonctionne. C'est moi qui avait mis le mauvais mot clé... EX à la place de RESSOURCE.
    Donc ça fonctionne bien. Par contre, je n'ai pas pu tester avec la méthode de remise de flag à 0 quand j'ai plusieurs mots à chercher. Ca fonctionne bien avec une occurrence (la remise du flag à 0) mais je dois attendre de tomber sur la configuration ou il y a plusieurs occurrences pour voir comment il m'affiche les mots.
    Le truc, c'est que je veux récupérer chaque mot et le passer en argument de la commande suivante.
    Donc si j'ai 3 mots, j'aurais 3 fois la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ps -edf|grep MS|grep "$mot"

  14. #34
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 379
    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 379
    Par défaut
    A priori, le grep de AIX supporte l'option -E, donc on peut l'utiliser pour ne faire qu'un seul appel de ta ligne.
    Par exemple, tu veux faire celle-ci avec AAAAAAA, BBBBBB et CCCCCC, ça ressemblerait à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mot="AAAAAAA|BBBBBB|CCCCCC"
    ps -edf|grep MS|grep -E "$mot"
    Reste plus qu'a dire à awk de retourner ce qu'il trouve sur une seule ligne avec comme séparateur de mot un |.
    Si je reprends le code de Jack-ft:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/RESSOURCE *=/ && ++flag == 2 {print $NF; flag = 0}'
    cela pourrait donner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/RESSOURCE *=/ && ++flag == 2 {A=A""X""$NF;X="|"; flag = 0}END{print A}'

  15. #35
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    1 935
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 935
    Par défaut
    Ok disedorgue, je teste ça dès que je tombe sur la configuration où il y a plusieurs occurrences et je te fais un retour. En tout cas merci beaucoup pour votre aide. Ensuite dès que je valide ça, mon script sera presque terminé. Il ne me restera plus qu'à l'habiller avec des echos pour que le résultat soit lisible.

Discussions similaires

  1. Extraction et mise en forme des données d'un tableau
    Par Patrice.peace dans le forum Langage
    Réponses: 1
    Dernier message: 23/03/2012, 23h17
  2. Mise à jour DataBase sur base du DataSet et Erreur Arguments trop nombreux
    Par Rifton007 dans le forum Accès aux données
    Réponses: 3
    Dernier message: 26/03/2009, 21h55
  3. Réponses: 5
    Dernier message: 09/02/2009, 14h14
  4. [MySQL] Extraction champs puis mise à jour simultanée
    Par Antherak dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/09/2008, 16h03
  5. [VBA Excel] Extraction de données fichier txt vers Excel et mise en forme
    Par newcodeur dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/05/2008, 12h45

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