Script shell : lecture fichier .txt

Résolu/Fermé
Serge - 12 mars 2010 à 10:49
 Serge - 12 mars 2010 à 20:09
Bonjour à tous,

Comme le titre l'indique j'aimerais écrire un script qui lit les données contenues dans un fichier ascii. J'ai déjà regardé sur le forum et d'autres sites mais je ne trouve rien résolvant exactement mon problème.
Le fichier ascii contient des valeurs sous la forme suivante:

1 NOTYET x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx
2 NOTYET x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx
3 NOTYET x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx
...

L'idée serait de parcourir chaque ligne (1,2,3,...) et pour chaque ligne de tirer la valeur de x.xxxxxxxxxxxxxe+xxx où x représente un chiffre quelconque et où chaque colonne représente un paramètre différent (il faudrait donc que je puisse identifier le x.xxxxxxxxxxxxxe+xxx pour chaque ligne et puis pour chaque colonne...). Il y a donc 4 paramètres différents par ligne et la notation de chaque paramètre est standard : notation scientifique à 14chiffres.

Pourriez-vous m'aider?
Merci d'avance!

Serge
A voir également:

3 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
12 mars 2010 à 10:54
Salut,

Il n'y a rien d'autre à faire ensuite ?
Dans ce cas un simple :

jp@MDK:~/tmpfs ssh$ cat plop
1 NOTYET x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx
2 NOTYET x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx
3 NOTYET x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx

jp@MDK:~/tmpfs ssh$ awk '{ print $3,$4,$5,$6 }' plop
x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx
x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx
x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx x.xxxxxxxxxxxxxe+xxx

jp@MDK:~/tmpfs ssh$

;-))
0
merci jipicy pour la rapidité de ta réponse!!
par contre je ne comprends pas tout ce que tu écris... :-)

cat plop : c'est pour trouver mon fichier ascii plop?

awk '{ print $3,$4,$5,$6 }' plop : il repère les différentes colonnes mais pour travailler ligne par ligne comment faire? chaque ligne correspond à un set de paramètres pour lancer une expérience, il faudrait donc créer une boucle parcourant les lignes, pour une ligne identifier la valeur de chaque paramètre (pour ça j'imagine qu'en faisant parametre1 = awk'{print$3}' fichier parametre2 = awk'{print$4}' fichier ... ca devrait aller(?)) une fois que ces paramètres sont identifiés, lancer l'expérience puis passer à la ligne suivante.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
12 mars 2010 à 11:38
Explique-nous d'abord calmement ce que tu veux faire, et ce qui doit être fait en fonction de chaque paramètre, sans quoi on part un peu n'importe où :-(

Pour répondre à tes questions :

cat plop : c'est pour trouver mon fichier ascii plop?
Non, en fait dans mon exemple c'était pour te montrer ce que contenant le fichier "plop". La commande "cat" affiche le contenu d'un fichier.

Pour lire un fichier ligne par ligne (par exemple) :

while read line
do
param1=$(awk '{print $3}' <<<${line})
param2=$(awk '{print $4}' <<<${line})
etc.
done < fichier


Mais bon si tu dois lancer un traitement sur chaque paramètre, autant le faire de suite plutôt que de stocker chaque paramètre dans une variable...
0
Serge > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
12 mars 2010 à 12:17
:-)
alors calmement :
je dois lancer des simu pour différents sets de paramètre. le script ne sert qu'à lancer les simu (elles se font sur un programme extérieur) et à changer la valeur de ces paramètres. j'ai donc un fichier propre au programme de simulation dans lequel je viens modifier la valeur des paramètres d'expérience grâce au script (le fichier input.dat est celui utilisé pour la simulation, le fichier input.dat.template sert à modifier la valeur des paramètres). avant j'introduisais manuellement la valeur des paramètres dans le script mais maintenant ces paramètres sont imposés et leurs valeurs se trouvent dans un fichier "Parameters.in" ascii dont la structure est celle décrite au début du sujet.

je pense qu'avec ces 2réponses je devrais déjà arriver à quelque chose, reste à savoir comment ouvrir mon fichier... :-)

pour info je mets mon script d'avant celui où je choisissais mes valeurs de paramètres (ce n'est pas la même notation (scientifique 14chiffres pour les paramètres) que celle du fichier "Parameters.in" mais cela ne change rien...).

echo 'starting'

export NOCOUNTER=1

for param1 in 0.02 0.05 0.08 0.2
do
for param2 in 0.01 0.02 0.04
do
for param3 in 0 5 10 15 20
do
for param4 in 0 0.1 0.2 0.3
do

cp input.dat.template input.dat

~/bin/replace MESH $param1 INC $param2 NUM $param3 X $param4 -- input.dat
~/lancement du programme de simulation

done
done
done
done

echo 'finished'
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
12 mars 2010 à 19:47
je pense qu'avec ces 2réponses je devrais déjà arriver à quelque chose, reste à savoir comment ouvrir mon fichier... :-)

Ben normalement l'exemple de boucle donné plus haut (while read... done < fichier) le fait.

Après un "cat fichier" le fait aussi, suffit ensuite de le passer au travers d'un "pipe" et de traiter le flux :

cat fichier | awk '{print $3}'

Par exemple...
0
un grand merci jipicy, j'essaie ca lundi. bon week end!
0