Boucle for pour toutes les lignes d'un fichier
wtfunix
Messages postés
48
Date d'inscription
Statut
Membre
Dernière intervention
-
wtfunix Messages postés 48 Date d'inscription Statut Membre Dernière intervention -
wtfunix Messages postés 48 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'aimerai savoir comment réaliser une boucle "for" sur toutes les lignes d'un fichier. Mon problème est que je ne sais pas comment syntaxer la boucle j'ai essayer plusieurs méthodes que j'ai chercher sur internet mais ça ne marche pas donc je pense que je dois mal m'y prendre :/. Le but étant de réaliser le programme suivant pour chaque ligne du fichier afin qu'il m'affiche consécutivement les résultats.
Voila mon programme :
voila donc ce programme marche pour la première ligne cependant pour n ligne je devrai rajouter :
nblign='wc -l f3 | awk '{print $1}''
for ((i=1; i<=$nblign; i++)); do
...
done
et remplacer le "1" dans ligne='sed -n ${1}p f3' par un "i" ce qui me donnerai : ligne='sed -n ${i}p f3'
Mais bon voila le programme ne fonctionne pas...
Merci d'avance
j'aimerai savoir comment réaliser une boucle "for" sur toutes les lignes d'un fichier. Mon problème est que je ne sais pas comment syntaxer la boucle j'ai essayer plusieurs méthodes que j'ai chercher sur internet mais ça ne marche pas donc je pense que je dois mal m'y prendre :/. Le but étant de réaliser le programme suivant pour chaque ligne du fichier afin qu'il m'affiche consécutivement les résultats.
Voila mon programme :
ligne='sed -n ${1}p f3'
asteroid='echo $ligne| awk '{print $1"_"$2}''
date1="${2}T00:00:00"
date2='echo $ligne| awk '{print $3"-"$4"-"$5}''
date3='echo $date2$date1'
step="5min"
nbstep="300"
echo "nom asteroide:" $asteroid
echo " date:" $date1
echo " date:" $date2
echo " date:" $date3
echo "step:" $step#echo "nombre de step:"$nbstep
curl "http://vo.imcce.fr/webservices/miriade/ephemcc/?-name=$asteroid&-type=aster&-ep=$date3&-nbd=$nbstep&-step=$step&-tcoor=1&-mime=text" > fic
echo "fin de step 1"
sed '/#/d' fic > fic1
cat fic1 | sort -k 8 > fic2
line=$(head -n 2 fic2)
echo $line
echo "fin de step 2"
voila donc ce programme marche pour la première ligne cependant pour n ligne je devrai rajouter :
nblign='wc -l f3 | awk '{print $1}''
for ((i=1; i<=$nblign; i++)); do
...
done
et remplacer le "1" dans ligne='sed -n ${1}p f3' par un "i" ce qui me donnerai : ligne='sed -n ${i}p f3'
Mais bon voila le programme ne fonctionne pas...
Merci d'avance
A voir également:
- Boucle for pour toutes les lignes d'un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Fichier rar - Guide
4 réponses
Il faudrait aussi que tu nous donnes un exemple de comment tu appelles ton script (paramètres), et comment tu comptes l'appeler quand il sera devenu multiligne
Au tout début je suis partie sur une exemple où le programme me donner bien le résultat :
Du coup, j'ai voulu effectuer la même chose pour le fichier paramètres suivant, ce fichier s'apelle f3:
2014 MJ26 2014 07 02 0.0249
2014 MF6 2014 07 09 0.0233
2014 MS5 2014 07 13 0.0449
2011 PU1 2014 07 17 0.0201
2014 MV41 2014 07 17 0.0273
2014 MA6 2014 07 23 0.0486
3981 88 2014 08 12 0.0399
2005 CD69 2014 08 14 0.0187
2014 MP5 2014 08 16 0.0451
1631 32 2014 08 30 0.0347
2011 PT 2014 10 03 0.0454
2011 TB4 2014 10 09 0.0134
2009 TD8 2014 10 27 0.0265
Cependant, afin d'avoir la même forme j 'ai du modifier le code et je l'ai tester pour la première ligne seulement, comme le montre le preogramme en dessous :
Je ne sais pas comment effectuer la même chose pour tout le fichier f3 ..
asteroid="2013_WT67"
date1="2014-8-17T00:00:00"
step="5min"
nbstep="300"
echo $asteroid
echo $date1
echo $step
echo $nbstep
curl "[http://vo.imcce.fr/webservices/miriade/ephemcc/?-name=]$asteroid&-type=aster&-ep=$date1&-nbd=$nbstep&-step=$step&-tcoor=1&-mime=text" > fictemp
echo "fin de step 1"
sed '/#/d' fictemp > fictemp2
#cat fictemp2 | sort -n -k 8 > fictemp3
cat fictemp2 | sort -k 8 > fictemp3
line=$(head -n 2 fictemp3)
echo $line
echo "fin de step 2"
Du coup, j'ai voulu effectuer la même chose pour le fichier paramètres suivant, ce fichier s'apelle f3:
2014 MJ26 2014 07 02 0.0249
2014 MF6 2014 07 09 0.0233
2014 MS5 2014 07 13 0.0449
2011 PU1 2014 07 17 0.0201
2014 MV41 2014 07 17 0.0273
2014 MA6 2014 07 23 0.0486
3981 88 2014 08 12 0.0399
2005 CD69 2014 08 14 0.0187
2014 MP5 2014 08 16 0.0451
1631 32 2014 08 30 0.0347
2011 PT 2014 10 03 0.0454
2011 TB4 2014 10 09 0.0134
2009 TD8 2014 10 27 0.0265
Cependant, afin d'avoir la même forme j 'ai du modifier le code et je l'ai tester pour la première ligne seulement, comme le montre le preogramme en dessous :
ligne='sed -n ${1}p f3'
asteroid='echo $ligne| awk '{print $1"_"$2}''
date1="${2}T00:00:00"
date2='echo $ligne| awk '{print $3"-"$4"-"$5}''
date3='echo $date2$date1'
step="5min"
nbstep="300"
echo "nom asteroide:" $asteroid
echo " date:" $date1
echo " date:" $date2
echo " date:" $date3
echo "step:" $step
echo "nombre de step:"$nbstep
curl "[http://vo.imcce.fr/webservices/miriade/ephemcc/?-name=]$asteroid&-type=aster&-ep=$date3&-nbd=$nbstep&-step=$step&-tcoor=1&-mime=text" > fic
echo "fin de step 1"
sed '/#/d' fic > fic1
cat fic1 | sort -k 8 > fic2
line=$(head -n 2 fic2)
echo $line
echo "fin de step 2"
Je ne sais pas comment effectuer la même chose pour tout le fichier f3 ..
Salut,
Tiens, voilà un exemple de lecture de fichier ligne par ligne en prenant tes exemples. Note que j'ai bêtement copié tes variables date, ce qui affiche quelques incohérences ;-\
Tiens, voilà un exemple de lecture de fichier ligne par ligne en prenant tes exemples. Note que j'ai bêtement copié tes variables date, ce qui affiche quelques incohérences ;-\
$ cat f3
2014 MJ26 2014 07 02 0.0249
2014 MF6 2014 07 09 0.0233
2014 MS5 2014 07 13 0.0449
2011 PU1 2014 07 17 0.0201
2014 MV41 2014 07 17 0.0273
2014 MA6 2014 07 23 0.0486
3981 88 2014 08 12 0.0399
2005 CD69 2014 08 14 0.0187
2014 MP5 2014 08 16 0.0451
1631 32 2014 08 30 0.0347
2011 PT 2014 10 03 0.0454
2011 TB4 2014 10 09 0.0134
2009 TD8 2014 10 27 0.0265
$ cat foo.sh
#! /bin/bash
step="5min"
nbstep="300"
while read line
do
A=( ${line} )
echo " nom asteroide: ${A[0]}_${A[1]}"
echo " date: ${A[2]}T00:00:00"
echo " date: ${A[2]}-${A[3]}-${A[4]}"
echo " date: ${A[2]}-${A[3]}-${A[4]}${A[2]}T00:00:00"
echo " step: ${step}"
echo " nombre de step: ${nbstep}"
echo
done < f3
$ ./foo.sh
nom asteroide: 2014_MJ26
date: 2014T00:00:00
date: 2014-07-02
date: 2014-07-022014T00:00:00
step: 5min
nombre de step: 300
nom asteroide: 2014_MF6
date: 2014T00:00:00
date: 2014-07-09
date: 2014-07-092014T00:00:00
step: 5min
nombre de step: 300
nom asteroide: 2014_MS5
date: 2014T00:00:00
date: 2014-07-13
date: 2014-07-132014T00:00:00
step: 5min
nombre de step: 300
nom asteroide: 2011_PU1
date: 2014T00:00:00
date: 2014-07-17
date: 2014-07-172014T00:00:00
step: 5min
nombre de step: 300
nom asteroide: 2014_MV41
date: 2014T00:00:00
date: 2014-07-17
date: 2014-07-172014T00:00:00
step: 5min
nombre de step: 300
nom asteroide: 2014_MA6
date: 2014T00:00:00
date: 2014-07-23
date: 2014-07-232014T00:00:00
step: 5min
nombre de step: 300
nom asteroide: 3981_88
date: 2014T00:00:00
date: 2014-08-12
date: 2014-08-122014T00:00:00
step: 5min
nombre de step: 300
nom asteroide: 2005_CD69
date: 2014T00:00:00
date: 2014-08-14
date: 2014-08-142014T00:00:00
step: 5min
nombre de step: 300
nom asteroide: 2014_MP5
date: 2014T00:00:00
date: 2014-08-16
date: 2014-08-162014T00:00:00
step: 5min
nombre de step: 300
nom asteroide: 1631_32
date: 2014T00:00:00
date: 2014-08-30
date: 2014-08-302014T00:00:00
step: 5min
nombre de step: 300
nom asteroide: 2011_PT
date: 2014T00:00:00
date: 2014-10-03
date: 2014-10-032014T00:00:00
step: 5min
nombre de step: 300
nom asteroide: 2011_TB4
date: 2014T00:00:00
date: 2014-10-09
date: 2014-10-092014T00:00:00
step: 5min
nombre de step: 300
nom asteroide: 2009_TD8
date: 2014T00:00:00
date: 2014-10-27
date: 2014-10-272014T00:00:00
step: 5min
nombre de step: 300