Bonjour à tous
je suis auto didactique et débutant en script shell. veuillez m'excuser par avance pour cette question mais après plusieurs recherches dans le forum et lecture de cours bash je ne trouve pas ma réponse ou en tout cas comment réaliser cette opération.
Le but est d'itérer tout les fichiers d'un dossier comprenant des fichiers .txt de 7lignes chacun et de comparer avec un fichier de 400 lignes pour trouver une concordance.
je souhaite imbriquer plusieurs boucles while comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 i=1 # boucle fichier while (($i <= Nombrefichier)) ; do echo $i j=1 # boucle ligne while (($j <= Nombreligne)) ; do echo $j ((j=j+2)) done ((i++)) done
il me semble avoir compris que le problème vient de la création de sous shell. et qu'un while read ... done<<< fichier.txt
permet de résoudre le problème. mais j'arrive pas à le faire
voici mon code désolé car il est pas très propre.
##############################
je vous remercie d'avance pour vos conseils
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 echo "Demarrage comparaison" find . -type f -name "tmpdat*.txt" | awk -F. ' {a[$NF]++;} END{for (i in a) print a[i];}'| cat > NBtmpdat.txt # recherche groupe de fichier à iterer "fichier*" et renvoie leur nombre dans NBtmpdat.txt NBFichier=$( awk 'NR == 1 {print}' NBtmpdat.txt) #renvoie le nb de fichier à itérer echo "nb de fichier: $NBFichier" #controle insertion NBtmpdat.txt dans valeur dans $NBFichier ITFichier=1 Ri=1 ARC=Final.dat #insertion nom gros fichier dans variable $CNbLigne=$(awk 'END {print NR}' $ARC) #renvoie le nb de ligne à itérer echo $CNbLigne #controle insertion Nb ligne dans valeur dans $CNbLigne while (($ITFichier <= $NBFichier)) ; do # Courbe Reférence Rj=1 RJ1=$(awk -F';' 'NR=='$Rj' {print $3}' tmpdat$Ri.txt) ((Rj=Ri+1)) RJ2=$(awk -F';' 'NR=='$Rj' {print $3}' tmpdat$Ri.txt) ((Rj=Ri+2)) RJ3=$(awk -F';' 'NR=='$Rj' {print $3}' tmpdat$Ri.txt) ((Rj=Ri+3)) RJ4=$(awk -F';' 'NR=='$Rj' {print $3}' tmpdat$Ri.txt) ((Rj=Ri+4)) RJ5=$(awk -F';' 'NR=='$Rj' {print $3}' tmpdat$Ri.txt) ((Rj=Ri+5)) RJ6=$(awk -F';' 'NR=='$Rj' {print $3}' tmpdat$Ri.txt) ((Rj=Ri+6)) RJ7=$(awk -F';' 'NR=='$Rj' {print $3}' tmpdat$Ri.txt) RNom=$(awk -F';' 'NR=='$Ri' {print $1}' $ARC) echo "Nom courbe comparateur" $RNom #Courbes A Comparer echo "nb de ligne" $CNbLigne i=1 ItLigne=1 while (( $ItLigne <= $CNbLigne )) ; do ((j=i)) CJ1=$(awk -F';' 'NR=='$j' {print $3}' $ARC) ((j=i+1)) CJ2=$(awk -F';' 'NR=='$j' {print $3}' $ARC) ((j=i+2)) CJ3=$(awk -F';' 'NR=='$j' {print $3}' $ARC) ((j=i+3)) CJ4=$(awk -F';' 'NR=='$j' {print $3}' $ARC) ((j=i+4)) CJ5=$(awk -F';' 'NR=='$j' {print $3}' $ARC) ((j=i+5)) CJ6=$(awk -F';' 'NR=='$j' {print $3}' $ARC) ((j=i+6)) CJ7=$(awk -F';' 'NR=='$j' {print $3}' $ARC) Nom=$(awk -F';' 'NR=='$i' {print $1}' $ARC) echo "Nom courbe comparée " $Nom ((i=i+7)) echo "Iteration i" $i ((CItLigne=CItLigne+7)) echo "Iteration Iterateur de ligne" $CItLigne done ((Ri++)) ((ITFichier++)) done
merci à tous
Partager