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 :

Structure de boucles


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut Structure de boucles
    Bonjour,

    Vous voyez une boucle de boucle de type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for  ; do
       for ; do
       done
    done
    Va donner une réponse de type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    11
    12
    13
    21
    22
    23
    31
    32
    33
    Mais est ce que vous connaîseriez une structure qui donnera

    Bonne journée !

  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
    Bonjour
    Citation Envoyé par judkil Voir le message
    Mais est ce que vous connaîseriez une structure qui donnera

    connaîseriez ??? C'est le verbe "connaîsoir" au conditionnel? Parce que pour "connaître" c'est "connaîtriez".
    De plus on ne met pas de conditionnel pour une question. Le conditionnel c'est la préposition qui suit une hypothèse. Si tu connaissais l'algorithmie (hypothèse) tu connaîtrais (conditionnel) la réponse. Si vraiment on veut se torturer sa grammaire à imposer un conditionnel inutile, alors on place en amont une hypothèse neutre style "est-ce que par hasard (hypothèse) vous connaîtriez une structure...".

    Voilà pour la partie français qui était la plus difficile. Parce que pour la partie shell c'est une boucle sur i variant de 1 à 3 et on affiche deux fois "$i".
    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
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut
    Oui connaîtriez, mince de mince effectivement loooool

    J'ai un de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i in liste1 ; do
    	for j in liste2 ;do
        	if $i = $j; then
        		echo $i $j
            fi
        done
    done

    Cela marche avec les nombres, bien sûr mais je voudrais faire pour deux listes en parallèle: la ligne 1 avec la ligne 1 la ligne 2 avec la ligne 2....

  4. #4
    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 judkil Voir le message
    Cela marche avec les nombres, bien sûr mais je voudrais faire pour deux listes en parallèle: la ligne 1 avec la ligne 1 la ligne 2 avec la ligne 2....
    Ah entre "construire une itération" et "lire un (des) fichier(s)" c'est pas la même chose. Ca ressemble à un problème XY.
    Elles sont dans deux fichiers les listes ?
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
     
    exec 3<fic1
    exec 4<fic2
    while true; do
    	read x 0<&3 || break
    	read y 0<&4 || break
    	echo "$x $y"
    done
    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]

  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
    pour comparer des fichiers, il y a des commandes : comm, diff, ou cmp.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut
    Merci je connaissais pas du tout cette notion. Je vais exactement-tout-dire

    Je possède deux listes
    liste1.txt
    DMP
    BEZ

    liste2.txt
    dump
    benza

    et je voudrais quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Pour DMP# le premier terme
    
    écrire explicite_pose_name-dump.txt # le premier terme
    
    for BEZ # le  deuxième terme
    
    écrire explicite_pose_name-benza.txt # le deuxième terme
    Ce serai quelque chose du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    prendre le-premier-terme de-la-liste-1 
     
    écrire dans le nom  le-premier-terme de-la-liste-2

    Je suis très habituée au boucles, mais ici cela ne marche pas. Je pensais aussi passer par un tableau en rentrant la liste dans un tableau et en appellant par index

  7. #7
    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 judkil Voir le message
    Je pensais aussi passer par un tableau en rentrant la liste dans un tableau et en appellant par index
    Et tu as pensé à regarder mon code précédent ???
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
     
    exec 3<"liste1.txt"
    exec 4<"liste2.txt"
    while true; do
    	read x 0<&3 || break
    	read y 0<&4 || break
    	echo "[$x] [$y]"
    done

    Résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [DMP] [dump]
    [BEZ] [benza]
    Après on peut aussi passer par des commandes qui zippent les fichiers. Tu n'as alors plus qu'à lire le résultat...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
     
    while read ligne; do
    	echo "[$ligne]"
    done < <(paste "liste1.txt" "liste2.txt")
    ... mais aussi tu dois le traiter (ie extraire les infos de la ligne).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [DMP	dump]
    [BEZ	benza]
    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]

  8. #8
    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
    il n'y a pas de lien apparent entre les données.
    alors, pourquoi ne pas utiliser uniquement le deuxième fichier ?

    de toutes façons, on lit un/des fichier(s) avec une boucle while.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut
    Le code précédent est excellent bien sûr mais c'est vrai que je ne peux pas l'intégrer comme je n'avais pas très bien expliqué

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut
    L'idée est pour le DMP écrit dans le nom du fichier dump
    Pour le BEN écrire dans le nom du fichier benza


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tableau1="$(liste_1.txt)"
     
    tableau2="$(liste_2.txt)"
     
    for  tableau1[0]; done
     
        echo " fichier-${tableau2[0]} "
     
    done

  11. #11
    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 judkil Voir le message
    Citation Envoyé par judkil Voir le message
    Je vais exactement-tout-dire
    mais c'est vrai que je ne peux pas l'intégrer comme je n'avais pas très bien expliqué


    Citation Envoyé par judkil Voir le message
    L'idée est pour le DMP écrit dans le nom du fichier dump
    Pour le BEN écrire dans le nom du fichier benza
    Ben (à ne pas confondre avec "BEN")... une fois que tu as associé "DMP" et "dump" dans deux variables, tu peux les torturer à ton aise...

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
     
    exec 3<"liste1.txt"
    exec 4<"liste2.txt"
    while true; do
    	read x 0<&3 || break
    	read y 0<&4 || break
    	echo "explicite_pose_name-$y.txt"
    done
    Résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    explicite_pose_name-dump.txt
    explicite_pose_name-benza.txt
    Accessoirement (et là je relie avec la remarque de N_BaH), puisque la variable "x" n'est pas utilisée, elle ne sert donc pas à grand chose. Et par ricochet le fichier "liste1.txt" pas beaucoup plus...

    Citation Envoyé par judkil Voir le message
    tableau1="$(liste_1.txt)"
    mapfile tableau1< <(cat "liste_1.txt").

    Citation Envoyé par judkil Voir le message
    for tableau1[0]; do...
    for t in "${tableau[@]}"; do.

    Ouvrir un tutoriel de shell serait éventuellement un plus non négligeable...
    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]

  12. #12
    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 judkil Voir le message
    L'idée est pour le DMP écrit dans le nom du fichier dump
    Pour le BEN écrire dans le nom du fichier benza
    ça n'explique toujours pas le lien/l'association entre les données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DMP <-?-> dump
    BEN <-?-> benza
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut
    Je fais de la biochimie sur ordinateur, le petit nom du dUMP (désoxyuridine monophosphate) dans les fichiers de coordonnées de molécules est DMP.
    Le petit nom de benza (acide benzoique) dans les fichiers de coordonnées de molécules est BEZ.

  14. #14
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 101
    Points : 4 446
    Points
    4 446
    Par défaut
    Tu as donc un fichier alias.txt et un autre noms.txt qu'il faut lier ?

    Cela nous avance pas forcément ! Comment est faite cette liaison entre les 2 noms ?
    - ligne n est toujours un alias de la ligne n de l'autre fichier ? (je suppose que c'est justement ta question initiale ???)
    - il faut comparer les caractères ? si tous les caractères de la ligne en minuscule sont dans l'autre ligne de l'autre fichier ... (avec que 2 exemples, difficile de savoir si toujours vrai)

    EDIT: ok puisque alias -> nom, le plus simple aurait été de créer directement un seul fichier (si possible ?) de clé ,valeur

    $moi= ( !== ) ? : ;

  15. #15
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut
    La liaison se fait en associant le premier mot de la liste 1, au premier mot de la liste 2, puis le deuxième mot de la liste 1 au deuxième mot de la liste 2.

    Oui j'ai un alias.txt et un nom.txt qui se suivent dans le même ordre.

  16. #16
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 107
    Points : 33
    Points
    33
    Par défaut
    Merci beaucoup !!

  17. #17
    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 judkil Voir le message
    La liaison se fait en associant le premier mot de la liste 1, au premier mot de la liste 2, puis le deuxième mot de la liste 1 au deuxième mot de la liste 2.

    Oui j'ai un alias.txt et un nom.txt qui se suivent dans le même ordre.
    ce serait bien qu'on ait le vrai format de ces fichiers !

    ça nous éviterait de piétiner :
    « ah, mais je vous ai pas tout dit »
    « ah, mais j'ai encore une précision à donner »
    « ah, mais il faudrait que ... par rapport à ce que je n'ai pas encore dit »


    des demi-énoncés n'ont même pas une demi-solution.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  18. #18
    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 judkil Voir le message
    La liaison se fait en associant le premier mot de la liste 1, au premier mot de la liste 2, puis le deuxième mot de la liste 1 au deuxième mot de la liste 2.
    Bon ben... je te l'ai montrée l'association. J'ai copié le premier mot de la liste 1 dans "x", le premier mot de la liste 2 dans "y", puis j'ai affiché "x et y". C'est bien une association ça. Puis je passe au mot suivant de liste 1 et au mot suivant de liste 2...
    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]

  19. #19
    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
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    read -u 3 x || break
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  20. #20
    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
    Sinon, on a aussi la commande paste qui fait exactement le boulot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ cat l1
    DMP
    BEZ
    $ cat l2
    dump
    benza
    $ paste l1 l2
    DMP     dump
    BEZ     benza
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Structure en boucle des fichiers plats.
    Par Domingo60 dans le forum SQL*Loader
    Réponses: 1
    Dernier message: 15/10/2010, 14h29
  2. Callback, structures et boucle
    Par cb450 dans le forum GTK+ avec C & C++
    Réponses: 20
    Dernier message: 23/10/2009, 14h09
  3. Commande Structure et boucle FOR
    Par angelevil dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/08/2009, 01h10
  4. [AC-2007] Structure de boucle
    Par louroulou dans le forum VBA Access
    Réponses: 3
    Dernier message: 26/08/2009, 09h15
  5. [Débutant] Structure et boucles
    Par rob408231 dans le forum MATLAB
    Réponses: 2
    Dernier message: 05/04/2009, 20h30

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