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 :

Question sur boucle for


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 23
    Points : 17
    Points
    17
    Par défaut Question sur boucle for
    Bonjour,

    Débutant en script bash, j'ai un truc qui me chiffonne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    avail=$(pip3 list --outdated --format columns | sed '1,2d')
     
    for i in "$avail"
    	do
    		echo "$i" | awk '{print $1}'
     
    		echo "$i" | awk 'NF{NF-=1};1'
     
    	done
    donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    idna
    tabulate
    idna 2.10 3.1
    tabulate 0.8.7 0.8.9
    Je m'attendais à avoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    idna
    idna 2.10 3.1
    tabulate
    tabulate 0.8.7 0.8.9
    Si quelqu'un peut m'expliquer ...

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Faudrait déjà que l'on connaisse le contenu de ta variable pour te répondre.

    Ensuite, j'espère que c'est juste un exemple que tu donne et que tu ne fais pas ce genre de boucle réellement car sauf si tu fais d'autre chose avec ta variable, ta boucle for est inutile car travail déjà en boucle sur un flux.

    Et ton contexte d'affichage peut aussi s'expliquer sur nos machines actuelles qui possèdent un cpu multi-core: rien ne garanti que tes 2 ligne d'echo soient executés avec le même core et que donc on ne sait pas lequel des core chope le E/S en premier.
    Mais ça, c'est vraiment une grosse supposition car on ne connait pas la valeur de ta variable.
    Cordialement.

  3. #3
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Je m'attendais à avoir:
    Et pourquoi t'attendais-tu à ce qu'il mélange tes lignes ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Faudrait déjà que l'on connaisse le contenu de ta variable pour te répondre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo "$avail"
    idna     2.10    3.1    wheel
    tabulate 0.8.7   0.8.9  wheel

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    ta façon de faire est maladroite.
    ce n'est pas comme qu'il faut s'y prendre : Comment lire un fichier en shell ou parcourir la sortie d'une commande.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Pour que tu comprennes ton erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ echo "$avail"
    idna     2.10    3.1    wheel
    tabulate 0.8.7   0.8.9  wheel
    $ n=0
    $ for i in "$avail"; do echo "$i"; n=$((n+=1)); echo n="$n" ;done
    idna     2.10    3.1    wheel
    tabulate 0.8.7   0.8.9  wheel
    n=1
    Comme tu peux le voir, ici i est egal à avail et non aux à chaque ligne de avail.

    Et comme je le disais plus haut, awk est suffisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ echo "$avail" | awk 'NF{print $1}NF{NF=NF-1}NF'
    idna
    idna 2.10 3.1
    tabulate
    tabulate 0.8.7 0.8.9
    Cordialement.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ta façon de faire est maladroite.
    Je n'en doute pas, mais je n'arrivais à trouver l'erreur.

    Avec une boucle while comme dans le lien, c'est nickel.
    Merci.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Pour que tu comprennes ton erreur:
    Comme tu peux le voir, ici i est egal à avail et non aux à chaque ligne de avail.

    Et comme je le disais plus haut, awk est suffisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ echo "$avail" | awk 'NF{print $1}NF{NF=NF-1}NF'

    Merci pour la démonstration. Tout s'explique !

    Et aussi pour grouper les 2 awk.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Citation Envoyé par Bruno21
    Citation Envoyé par NBaH
    ta façon de faire est maladroite.
    Je n'en doute pas,[...]
    ah, si je peux aider à enfoncer les portes ouvertes...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. Question sur boucle for
    Par webkoros dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/03/2014, 11h56
  2. petite question rapide sur boucle for
    Par KateA dans le forum C
    Réponses: 15
    Dernier message: 08/03/2010, 23h59
  3. Question sur boucle
    Par titeZ dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/08/2007, 20h30
  4. Réponses: 3
    Dernier message: 11/06/2006, 12h09
  5. [BATCH] Aide sur boucle for et test
    Par t_om84 dans le forum Windows
    Réponses: 3
    Dernier message: 07/06/2006, 10h12

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