Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/05/2017, à 18:43

Nouwenda

scipt pour exécuter plusieurs fois plusieurs programmes

Bonjour,

J'ai un problème équivalent à celui-ci : https://forum.ubuntu-fr.org/viewtopic.php?id=405803
Je dois effectivement faire tourner 3 programmes successifs (en fortran) et sauver tous les fichiers crées dans un répertoire propre (nommé models)
à la fin de chaque itération, je dois ouvrir des fichiers de paramètres, en changer quelques un et relancer tout le bousin

Pour ce faire j'ai commencé un script en bash

#!/bin/bash

models="102 103 104"
for model in $models
do
mkdir $model
../../bin/prog1
../../bin/prog2
mpirun prog3
done

Je n'ai pas avancé beaucoup alors j'aurais 2 questions :

- Comment envoyer directement les sorties de mes programmes dans le répertoire fraîchement crée (ex: 102, pour le 1er) en évitant les copié-collés

- Comment ensuite changer un paramètre dans un fichier donnée ?

Merci pour toutes aides, astuces ou conseils.

Hors ligne

#2 Le 31/05/2017, à 19:13

alduc31

Re : scipt pour exécuter plusieurs fois plusieurs programmes

Salut,

Pour les résultats dans chaque répertoire :

for model in $models
do
mkdir $model
../../bin/prog1 > $model/result_prog1.txt
../../bin/prog2 > $model/result_prog2.txt
mpirun prog3 > $model/result_prog3.txt
done

Pour la modif des paramètres, je sais pas exactement comment tu fais (ou ce que tu veux). Je te propose cette solution d'après ce que j'ai compris :
Tu prépares les fichiers paramètres pour chaque programme et chaque itération (en fait chaque model) =>
        param_prog1_102.txt  : pour prog1 et model=102
et ainsi de suite pour chaque cas. Puis :

for model in $models
do
mkdir $model

# Mise a jour des parametres !
cp param_prog1_"$model".txt  param_prog1.txt
cp param_prog2_"$model".txt  param_prog2.txt
cp param_prog3_"$model".txt  param_prog3.txt

../../bin/prog1 > $model/result_prog1.txt
../../bin/prog2 > $model/result_prog2.txt
mpirun prog3 > $model/result_prog3.txt
done

Asus UX325EA oled (i5-1135G7,16Go) avec Lunar 23.04 (base xubuntu modifiée)

Hors ligne

#3 Le 01/06/2017, à 10:04

Nouwenda

Re : scipt pour exécuter plusieurs fois plusieurs programmes

Merci de ta réponse.

Le problème est que les 3 programmes me sortent toute une série de fichiers déjà nommés que j'aimerais placer automatiquement dans le bon répertoire model

Pour la 2eme idée, la méthode est bien trouvée! mais il serait sans doute plus simple pour moi d'ouvrir ce fichier de lire une ligne et de remplacer la valeur.
Imaginons que j'ai un fichier param1.txt :

0.02 #valeur de A
0.05 #valeur de B
0.08  0.25

comment pourrais je changer la valeur de A en 0.047 par exemple, ou bien encore le 0.25 de la 3eme ligne en 0.887 ?

Merci encore.

Hors ligne

#4 Le 01/06/2017, à 11:37

erresse

Re : scipt pour exécuter plusieurs fois plusieurs programmes

Bonjour,
Pour écrire les fichiers dans un répertoire donné, à condition que les programmes ne contiennent pas un chemin absolu en dur bien sûr, c'est d'entrer dans le répertoire après l'avoir créé : mkdir $model; cd $model
Évidemment, il faut tenir compte de ce positionnement dans les instructions de lancement des programmes ensuite : ../../bin/prog...
Quant à ta deuxième question, c'est tout à fait envisageable de modifier des valeurs dans des fichiers, mais... c'est beaucoup plus délicat et difficile à mettre en script que la solution que alduc31 t'a suggérée.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#5 Le 01/06/2017, à 17:55

Nouwenda

Re : scipt pour exécuter plusieurs fois plusieurs programmes

Merci à vous 2

La solution d'erresse semble la plus simple à mettre en œuvre dans mon cas.

Hors ligne