Salut à tous,


Je dois faire un script ksh qui doit faire la chose suivante.

1 - prendre en paramètres d'entrée un fichier
2 - compter les lignes de ce fichier
3 - sélectionner une partie de chaque ligne, qui sont des chiffres, et en faire la somme.



Vu comme ça, de loin, je m'étais dit "Ok, ça à l'air tout ballot", même si je suis pas spécialisé dans ça.

Hop, après quelques rafraichissements et des lectures de man et autres docs, j'arrive à faire les étapes 1- et 2-.


Par contre, à l'étape 3-, là ça part en sucette et je pige pas bien pourquoi.


Pour le moment, j'ai ça

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
#!/bin/ksh
echo "Nom du fichier traité: $1"
 
typeset var ligne
#typeset var montant
 
NBLIGNE=`awk 'END {print NR}' $1`
 
echo $NBLIGNE
 
cat $1 | while read ligne
 
do
        test=$ligne
        echo $test | cut -c 76-91
done

Le fichier en entrée contient des lignes formatées de la même façon.

Voici son contenu
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
EBC_INIT000001  E0593105111   U593              200206001                  000000000000000 000000000000000                                                                                                                                         
EBC_INIT000001  E0593105111   U593              200212001                  000000000000000 000000000028862                                                                                                                                         
EBC_INIT000001  E0593105111   U593              200306001                  000000000028862 000000000158512                                                                                                                                         
EBC_INIT000001  E0593105111   U593              200506001                  000000000158512 000000009353118                                                                                       000000000158512                                   
EBC_INIT000001  E0593105111   U593              200602001                  000000009353118 000000009353118                                    000000009353118                                                                                      
EBC_INIT000001  E0593105111   U593              200603001                  000000009353118 000000009353118                                    000000009353118                                                                                      
EBC_INIT000001  E0593105112   U593              200206001                  000000031310329 000000031100564                                                                                                                                         
EBC_INIT000001  E0593105112   U593              200212001                  000000031310329 000000031056610                                                                                                                                         
EBC_INIT000001  E0593105112   U593              200306001                  000000031056610 000000002018306                                                                                                                                         
EBC_INIT000001  E0593105112   U593              200312001                  000000031056610 000000001823567                                                                                                                                         
EBC_INIT000001  E0593105112   U593              200406001                  000000001823567 000000001823567                                                                                       000000002018306                                   
EBC_INIT000001  E0593105112   U593              200412001                  000000001823567 000000001823567                                                                                       000000001823567                                   
EBC_INIT000001  E0593105112   U593              200506001                  000000001823567 000000000000000                                                                                       000000001823567                                   
EBC_INIT000001  E0593105112   U593              200512001                  000000001823567 000000000000000                                                                                       000000001823567                                   
EBC_INIT000001  E0593105113   U593              200206001                  000000000000000 000000000209765                                                                                                                                         
EBC_INIT000001  E0593105113   U593              200212001                  000000000000000 000000000000000                                                                                                                                         
EBC_INIT000001  E0593105113   U593              200306001                  000000000000000 000000028908654                                                                                                                                         
EBC_INIT000001  E0593105113   U593              200312001                  000000000000000 000000029103393                                                                                                                                         
EBC_INIT000001  E0593105113   U593              200406001                  000000029103393 000000000000000                                                                                       000000028908654                                   
EBC_INIT000001  E0593105113   U593              200412001                  000000029103393 000000000000000                                                                                       000000029103393                                   
EBC_INIT000001  E0593105113   U593              200506001                  000000000000000 000000000000000                                                                                       000000000000000                                   
EBC_INIT000001  E0593105113   U593              200512001                  000000000000000 000000000000000                                                                                       000000000000000                                   
EBC_INIT000001  E0593105310   U593              200212001                                  000000001174632                                                                                                                                         
EBC_INIT000001  E0593121992   U593              200702001                  000000000000000 000000000000000                                    000000000000000                                    000000000000000                                   

On m'a dit dans ma doc: "Extraits les caractères 91 à 106 de chaque ligne"
Déjà, allez savoir pourquoi, je sias pas comment sont comptés les espaces et/ou tabulation, mais en vrai, ce qui m'intéresse, c'est pas de 91 à 106, mais de 76 à 91 (d'où le cut -c 76-91)


Donc je lance mon script.

Et là:

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
Nom du fichier traité: EBC_INIT_593.dat
24



00000000158512
00000009353118
00000009353118




00000002018306
00000001823567
00000001823567
00000001823567




00000028908654
00000029103393
00000000000000
00000000000000



Comme vous pouvez le constater, y a des trous et il manque des valeurs.

Il devrait y avoir au début

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
000000000000000
000000000028862
00000000158512
Or, on passe directement à



Idéalement, ca devrait me donner ça

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
Nom du fichier traité: EBC_INIT_593.dat
24
000000000000000
000000000028862
000000000158512
000000009353118
000000009353118
000000009353118
000000031100564
000000031056610
000000002018306
000000001823567
000000001823567
000000001823567
000000000000000
000000000000000
000000000209765
000000000000000
000000028908654
000000029103393
000000000000000
000000000000000
000000000000000
000000000000000
000000001174632
000000000000000
Et en fait, ça me donne ça

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
Nom du fichier traité: EBC_INIT_593.dat
24



00000000158512
00000009353118
00000009353118




00000002018306
00000001823567
00000001823567
00000001823567




00000028908654
00000029103393
00000000000000
00000000000000


Donc voilà, je comprends pas.

Si quelqu'un à une idée, ca serait super.