#1 Le 02/12/2012, à 22:00
- Salim86
faire une boucle en tcsh qui n'écrase pas le résultat
Bonsoir,
La question que je me pose est la suivante :
Je pars d'un script
foreach filename (t1_????????)
asegstats2table --subjects ${filename} \
--segno 11 12 13 \
--tablefile asegstats.txt
end
C'est dans le cadre pour un logiciel d'imagerie médicale (freesufer) que je l'utilise.
C'est le script qui me permet d'obtenir les résultats pour un grand nombre de sujets.
je dispose d'images d'irm qui s'appellent t1_???????? (wild card qui permet de prendre en compte tous les fichiers)
les résultats de chaque image doivent être importés dans un fichier qui s'appelle asegstats.txt
le problème c'est qu'avec ce script (fait en tcsh), à chaque fois que le logiciel fait une boucle, il efface le résultat mis dans asegstats de la boucle précédente.
donc au final je me retrouve avec les résultats pour la dernière image.
Y a t il une possibilité de faire en sorte que le logiciel n'écrase pas le résultat pour que je puisse avoir dans mon fichiers texte tous les résultats des images que je veux analyser.
Par image j'entends images d'IRM.
Merci Beaucoup,
Bonne soirée
Charles
PS : il ne m'a pas semblé que la question ait déjà été posée, mais c'est difficile de trouver grâce à la fonction recherche ce genre d'information
Sachant que quand je tape le script dans le terminal en remplaçant $filename par des noms de fichiers (t1_37481019 t1_098UJH27 etc..) j'ai le résultat que je veux et le résultat de n+1 n'écrase pas le résultat de n (où n est une imager d'IRM)
Dernière modification par Salim86 (Le 02/12/2012, à 22:06)
Hors ligne
#2 Le 02/12/2012, à 23:03
- pingouinux
Re : faire une boucle en tcsh qui n'écrase pas le résultat
Bonsoir,
Je ne connais pas tcsh, mais j'ai regardé la doc de asegstats2table. Est-ce que ceci peut convenir ?
asegstats2table --subjects t1_???????? --segno 11 12 13 --tablefile asegstats.txt
Hors ligne
#3 Le 03/12/2012, à 00:49
- Salim86
Re : faire une boucle en tcsh qui n'écrase pas le résultat
Bonsoir,
Merci beaucoup pour la rapidité de ta réponse. Merci d'avoir regardé dans la documentation, tu utilises le logiciel aussi ?
J'ai déjà essayé ce que tu propose, mais malheureusement les wild mask (de type ???????) ne sont pas pris en charge par le bash tcsh, par contre il fonctionne bien dans le script.
il faut mettre le nom de chaque image sans wild mask.
une autre option à laquelle je pensais sans pouvoir la concrétiser serait de faire un fichier texte à part et de faire en sorte que le script renvoie à ce fichier texte avec la fonction "cat".
mais si ça se trouve ça serait le même problème.
Si tu as une autre idée, ou même une piste je suis preneur.
Bonne soirée et bonne semaine
Charles
Hors ligne
#4 Le 03/12/2012, à 01:20
- aduxas
Re : faire une boucle en tcsh qui n'écrase pas le résultat
Ton problème n'est pas lié à la shell que tu utilises. Ta boucle en effet écrase le résultat précédent à chaque coup. Il faut essayer un peu, p.e.
foreach filename (t1_????????)
asegstats2table --subjects ${filename} --segno 11 12 13 >> asegstats.txt
end
ou encore
foreach filename (t1_????????)
asegstats2table --subjects ${filename} --segno 11 12 13 --tablefile A.txt
cat A.txt >> asegstats.txt
end
La première commande suppose que la sortie par défaut (stdout) correspond à l'opion
--tablefile <fichier>
Si ce n'est pas le cas, la deuxième méthode utilise une sortie temporaire et la colle au bout du fichier asegstats.txt. Si celui-ci est un fichier texte (ascii), ça devrait marcher. Tu peux insérer un "rm -f asegstats.txt" juste avant la boucle pour effacer la trace de la boucle précédente.
Hors ligne
#5 Le 03/12/2012, à 08:12
- pingouinux
Re : faire une boucle en tcsh qui n'écrase pas le résultat
tu utilises le logiciel aussi ?
Non, c'est la première fois que j'en entends parler.
Es-tu sûr d'avoir mis le bon nombre de ? dans le nom du fichier ? Cette commande liste-t-elle bien tes fichiers ?
echo t1_????????
Hors ligne
#6 Le 03/12/2012, à 12:11
- Salim86
Re : faire une boucle en tcsh qui n'écrase pas le résultat
oui tout à fait : quand je fais ls t1_???????? ça marche sans pb.
je vais essayer ce que tu me conseilles ce soir
Hors ligne