Si y a égalité, on prend le premier de la liste du groupe.
Ca ressemble vachement à un mec qui attend qu'on lui code sa solution. Donc oui, j'ai une proposition. Je propose que tu décortiques ce qu'on t'a dit (comme tu l'as annoncé récemment). Puis ensuite je propose que tu nous montres ton code (un code qui donne le bon résultat évidemment, ou au pire qui ne donne pas forcément le bon résultat mais qui montre au-moins que tu sais récupérer l'info qui va bien de ta ligne de fruits et la soustraire à la moyenne précédemment calculée). Et là enfin on te proposera des possibilités de correction/optimisation/simplification.
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]
Bonjour , voici
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 #moyennes.txt #1 7.8 #2 4.75 #!/bin/bash grep '1 ' groupe.txt > temp2 awk '{ print $2 } ' temp2 > temp3 #temp3 # 1 8 Orange # 1 6.5 Banane # 1 6.2 Pomme # 1 12 Abricot # 1 7 Mure a=($(cat temp3 )) b=($(cat moyennes.txt )) minim=$(expr ${a[0]} - ${b[1]}) # comparaison de la première différence avec la moyenne for i in $a; do # pour chaque valeur de la liste if [ i - "${b[1]}" <= $minim ]; then # si la différence de i avec la moyenne est inférieur à la première différence alors minim devient le difference testée $minim=i fi echo $i done
non.
pas grep puis awk, surtout sur des fichiers temporaires.
expr est une programme externe inutile en bash.
on ne fait pas une boucle for sur le contenu d'un fichier; un fichier se lit avec une boucle while.
pour mettre le contenu d'un fichier dans un tableau, il y a mapfile (aka readarray).
tu n'as évidemment pas testé ton script
$a n'est pas le contenu du tableau, ce n'en est que le premier élément, équivalent à "${a[0]}",
ne peut pas fonctionner :
Code : Sélectionner tout - Visualiser dans une fenêtre à part [ i - "${b[1]}" <= $minim ]
- il n'y a pas de contexte arithmétique, donc valX - valY ne donnera pas le résultat espéré,
- i ne sera pas développé come pourrait l'être $i,
- <= n'est pas une opérateur arithmétique,
- pourquoi uniquement ${b[1]} ?
Bon, au moins c'est un code. Mais il n'y a pas grand chose à en tirer. Mais j'admets que c'est de ma faute, j'ai demandé un code, pas un code qui fonctionne (petit détail qui fait toute la différence).
Tu ne voudrais pas d'abord apprendre le bash? Je t'assure, pour programmer en bash ce serait un plus...
Déjà les fichiers temporaires sont rarement nécessaires. Mais s'ils le sont, on les met dans "/tmp" qui est justement "le" répertoire qui leur est dédié. Ca évite d'en foutre de partout. Mais ça c'était juste le peanut par rapport au gros de ce programme.
Prenons par exemple a=($(cat temp3 )). Que contient "a"? Le résultat d'une commande, ici cat temp3. Donc visiblement tu sais mettre une commande dans une variable.
Et que contient "temp3"? Lui aussi une commande, ici awk '{ print $2 } ' temp2 >temp3. Tu aurais pu donc la mettre directement dans "a".
Et que contient "temp2"? Lui aussi une commande, ici grep '1 ' groupe.txt >temp2. Tu le sens où je veux en venir?
Et vu que "temp2" n'est pas réutilisé, il peut disparaitre. "temp3" peut donc s'écrire grep '1 ' groupe.txt |awk '{ print $2 } ' >temp3.
Mais vu que "temp3" sert uniquement à remplir "a", lui aussi il peut disparaitre. Et "a" devient alors a=($(grep '1 ' groupes.txt |awk '{ print $2 }')). Et si tu apprends le langage "awk" (ok, un autre langage à apprendre mais c'est inévitable) alors tu peux lui insérer l'instruction qui remplace le grep. Remarque vu qu'elle n'est pas évidente à retenir si tu laisses le grep je n'en ferai pas une maladie. S'il n'y avait que ça qui n'allait pas dans ton script...
Pour le reste... for i in $a s'écrira plutôt for i in ${a[@]} (ben oui, tu as créé un tableau, maintenant il faut t'en servir). Puisque tu sais qu'une variable s'obtient en lui mettant "$" devant on se demande pourquoi tu ne le fais pas pour "i" quand tu calcules la différence ; qu'un calcul étant une expression ben il doit s'écrire dans la syntaxe des expressions ; qu'on ne compare pas une inégalité avec "<=" mais "-le" ; et qu'on ne met pas de "$" devant une variable quand on lui affecte une valeur (tu ne l'as pas fait pour "a", on se demande pourquoi tu le fais pour "minim")
Que veux-tu qu'on fasse? Qu'on te réécrive ici tout un cours de bash? En plus il y a justement un lien vers un tutoriel bash dans ma signature (ok il est un peu vieux et les dernières technologies n'y sont pas mais déjà si tu ne fais que le lire tu auras fait quand-même un immense bon en avant). Sinon t'es pas obligé d'utiliser le mien mais t'es quand-même un petit peu obligé d'en utiliser un quel qu'il soit.
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]
Sve@r, si tu ne veux pas m'aider, c'est ok. Mais si c'est pour m'engueuler comme si t'étais mon père, laisses carrément tomber.
Je fais un effort et on me prette de mauvaises intentions.
Y a d'autres problèmes sur le forum très certainement plus intéressantes que celui-ci...
On n'a visiblement pas la même conception du verbe "aider". Parce qu'avec toutes les infos que que je t'ai donné sur comment lire un fichier ligne par ligne, comment extraire une info particulière d'une ligne, comment éviter les fichiers temporaires, l'opérateur à utiliser pour comparer deux nombres, venir dire que je ne veux pas t'aider c'est carrément de la mauvaise foi. Maintenant si pour toi "aider" signifie "te faire ton code" évidemment on ne s'entendra pas (ni avec moi, ni avec personne)
Je t'ai pas engueulé, je t'ai dit de lire un tuto. Tu crois que c'est déshonorant? Tu crois que moi je n'en lis pas chaque fois que je veux apprendre un truc? Tu penses vraiment que la syntaxe shell va monter en toi par capilarité?
Le reste (mettre parfois dollar quand c'est inutile, ne pas le mettre quand c'est utile) c'était juste te mettre le nez dans tes incohérences. Tu aurais voulu quoi à la place? Que je te dise "ok c'est super" alors que ton programme ne s'exécute même pas tellement il est rempli d'erreurs de syntaxe à chaque ligne??? Je ne suis pas là pour faire du social, mais pour te faire progresser en shell. Je te remercie pour le -1, j'apprécie. Fais du bien à Bertrand, te répond en caguant. Heureusement N_BaH () a rétabli l'équilibre.
Toi laisse carrément tomber si tu ne veux pas apprendre.
Justement, c'est là l'erreur; il faut en faire beaucoup. Tu as décortiqué les posts précédents comme tu l'avais annoncé ?
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]
c'est pas de l'aide ça ?Prenons par exemple a=($(cat temp3 )). Que contient "a"? Le résultat d'une commande, ici cat temp3. Donc visiblement tu sais mettre une commande dans une variable.
Et que contient "temp3"? Lui aussi une commande, ici awk '{ print $2 } ' temp2 >temp3. Tu aurais pu donc la mettre directement dans "a".
Et que contient "temp2"? Lui aussi une commande, ici grep '1 ' groupe.txt >temp2. Tu le sens où je veux en venir?
Et vu que "temp2" n'est pas réutilisé, il peut disparaitre. "temp3" peut donc s'écrire grep '1 ' groupe.txt |awk '{ print $2 } ' >temp3.
Mais vu que "temp3" sert uniquement à remplir "a", lui aussi il peut disparaitre. Et "a" devient alors a=($(grep '1 ' groupes.txt |awk '{ print $2 }')). Et si tu apprends le langage "awk" (ok, un autre langage à apprendre mais c'est inévitable) alors tu peux lui insérer l'instruction qui remplace le grep. Remarque vu qu'elle n'est pas évidente à retenir si tu laisses le grep je n'en ferai pas une maladie. S'il n'y avait que ça qui n'allait pas dans ton script...
Pour le reste... for i in $a s'écrira plutôt for i in ${a[@]} (ben oui, tu as créé un tableau, maintenant il faut t'en servir). Puisque tu sais qu'une variable s'obtient en lui mettant "$" devant on se demande pourquoi tu ne le fais pas pour "i" quand tu calcules la différence ; qu'un calcul étant une expression ben il doit s'écrire dans la syntaxe des expressions ; qu'on ne compare pas une inégalité avec "<=" mais "-le" ; et qu'on ne met pas de "$" devant une variable quand on lui affecte une valeur (tu ne l'as pas fait pour "a", on se demande pourquoi tu le fais pour "minim")
${b[1]} issue de [b=($(cat moyennes.txt )) est la première moyenne.
Re ! Du coup pour cette partie, si une moyenne c'est la somme de chaque terme, divisée le nombre de termes, du coup là ce serait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 v[i]*1.0 # la somme de chaque terme n[i]; # la somme du nombre de termesque signifie cela ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part v[i]*1.0
Valeur du tableau v pour la clé i, multiplié par 1.
Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager