Bonjour,

J'ai un script ksh sous Solaris 10 qui utilise nawk pour traiter deux fichiers afin d'en créer un troisième.
Le script créer des processus en <defunct> et met enormement de temps à se terminer alors que les deux fichiers traités ne font que 24Mo et 3,5Mo.
J'aimerai bien modifier mon script pour corriger le bug qui créer ces processus en <defunct> et ralenti le traitement mais je ne vois pas ce qui ne marche pas.
Le script est plus long avec d'autre awk qui crée aussi des defunct mais je l'ai tronqué car si je corrige le bug ici, je pourrai le corriger le reste du script.

Merci.

Voici les 10 première ligne des deux fichiers traités :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
head -10 fic_tmp2_22936
 group              ss created     client      retent  ssid             total nfiles pool          lvl fl name                           browse
SVI_Incr_SystAppli_Quot_ma 12/30/09 03:36:43 ivr5_oem 01/06/10 372948155 8341212 157 SFRIncrAllQuot1 incr cE /cdr                        01/06/10
SVI_Incr_SystAppli_Quot_ma 12/30/09 03:36:45 scp1_oem 01/06/10 339393725 4654248 24 SFRIncrAllQuot1 incr cE /logs                        01/06/10
SVI_Incr_SystAppli_Quot_ma 12/30/09 03:36:45 pfs4_oem 01/06/10 322616509 268812 20 SFRIncrAllQuot1 incr cE /logs                         01/06/10
SVI_Incr_SystAppli_Quot_ma 12/30/09 03:36:47 om1_oem 01/06/10 289062079 193478524 25 SFRIncrAllQuot1 incr cE /logs                       01/06/10
SVI_Incr_SystAppli_Quot_ma 12/30/09 03:36:44 scp1_oem 01/06/10 356170940 35555512 210 SFRIncrAllQuot1 incr cE /cdr                       01/06/10
SFBOX_Incr_ConfSystAppli_Quot_Sa 12/30/09 04:16:00 xsavec1 01/06/10 2621097456 4 0 SFRIncrAllQuot1 incr cE /btsave/ty_data               12/31/09
SFBOX_Incr_ConfSystAppli_Quot_Sa 12/30/09 04:16:02 xsavec1 01/06/10 2587543026 4 0 SFRIncrAllQuot1 incr cE /btsave/ty_exec               12/31/09
NOC_OVIS_Incr_SysAppli_Quot_ma 12/30/09 04:16:09 ch3svcip03 01/06/10 2570765817 4183636 4 SFRIncrAllQuot1 full ca SYSTEM STATE:\         01/06/10
MET_Incr_ConfSystAppli_quot_ma 12/30/09 04:17:32 sts1 01/06/10 1597687372 8041411968 111 SFRIncrAllQuot1 incr cE /u01                    12/31/09

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
head -10 fic_tmp5_22936 
yes;bdd2;inconnu;;CTC_Full_ConfSystAppli_Hebdo;02/04/10 05:00:01;02/04/10 05:00:13;OK;skip;4;;0;/u00/app/oracle/admin
!/u00/app/oracle
!/
!/u90/oracle/backup;/nsr/logs/groups/CTC_Full_ConfSystAppli_Hebdo/CTC_Full_ConfSystAppli_Hebdo_Success_20100204-050015.log
yes;bdd3;inconnu;;CTC_Full_ConfSystAppli_Hebdo;02/04/10 05:00:01;02/04/10 05:00:13;OK;skip;3;;0;/u00/app/oracle/admin
!/u00/app/oracle
!/;/nsr/logs/groups/CTC_Full_ConfSystAppli_Hebdo/CTC_Full_ConfSystAppli_Hebdo_Success_20100204-050015.log
yes;ctc1;inconnu;;CTC_Full_ConfSystAppli_Hebdo;02/04/10 05:00:01;02/04/10 05:00:13;OK;skip;3;;0;/
!/apps/apache/current/logs
!/apps/data/logs;/nsr/logs/groups/CTC_Full_ConfSystAppli_Hebdo/CTC_Full_ConfSystAppli_Hebdo_Success_20100204-050015.log
yes;ctc2;inconnu;;CTC_Full_ConfSystAppli_Hebdo;02/04/10 05:00:01;02/04/10 05:00:13;OK;skip;3;;0;/
!/apps/apache/current/logs
!apps/data/logs;/nsr/logs/groups/CTC_Full_ConfSystAppli_Hebdo/CTC_Full_ConfSystAppli_Hebdo_Success_20100204-050015.log
yes;ctc3;inconnu;;CTC_Full_ConfSystAppli_Hebdo;02/04/10 05:00:01;02/04/10 05:00:13;OK;skip;3;;0;/
!/apps/apache/current/logs
!/apps/data/logs;/nsr/logs/groups/CTC_Full_ConfSystAppli_Hebdo/CTC_Full_ConfSystAppli_Hebdo_Success_20100204-050015.log
yes;fr-ctc-bdd1;inconnu;;CTC_Full_ConfSystAppli_Hebdo;02/04/10 05:00:01;02/04/10 05:00:13;OK;skip;1;;0;All;/nsr/logs/groups/CTC_Full_ConfSystAppli_Hebdo/CTC_Full_ConfSystAppli_Hebdo_Success_20100204-050015.log
yes;fr-ctc-bdd2;inconnu;;CTC_Full_ConfSystAppli_Hebdo;02/04/10 05:00:01;02/04/10 05:00:13;OK;skip;1;;0;All;/nsr/logs/groups/CTC_Full_ConfSystAppli_Hebdo/CTC_Full_ConfSystAppli_Hebdo_Success_20100204-050015.log
yes;fr-ctc-bdd3;inconnu;;CTC_Full_ConfSystAppli_Hebdo;02/04/10 05:00:01;02/04/10 05:00:13;OK;skip;1;;0;All;/nsr/logs/groups/CTC_Full_ConfSystAppli_Hebdo/CTC_Full_ConfSystAppli_Hebdo_Success_20100204-050015.log
yes;jumpstart;inconnu;;CTC_Full_ConfSystAppli_Hebdo;02/04/10 05:00:01;02/04/10 05:00:13;OK;skip;1;;0;/apps/infra;/nsr/logs/groups/CTC_Full_ConfSystAppli_Hebdo/CTC_Full_ConfSystAppli_Hebdo_Success_20100204-050015.log
yes;bdd1;inconnu;;CTC_Full_ConfSystAppli_Hebdo;02/04/10 05:00:01;02/04/10 05:00:13;OK;skip;3;;0;/u00/app/oracle/admin
!/u00/app/oracle
!/;/nsr/logs/groups/CTC_Full_ConfSystAppli_Hebdo/CTC_Full_ConfSystAppli_Hebdo_Success_20100204-050015.log

Et voila le script :
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/usr/bin/ksh
set -x
TMPreport3=fic_tmp5_22936 
MMINFORES=fic_tmp2_22936 
 
# ==> Lecture de MMINFORES pour recuperer des infos
#Passage de la variable existonly
#TMPreport3 : group date heure client rentention ssid taille nbfile pool level sumflags saveset browse policy
cat $TMPreport3 | nawk -v existonly=$EXISTONLY '
    BEGIN {
           #$1 $2 $3 ... issue du fichier $MMINFORES
           #Creation de plusieurs tableau avec pour cle le ssid (source MMINFORES)
           while ("cat '$MMINFORES'" | getline) {
               dsave[$6]="20"substr($2,7,2)substr($2,1,2)substr($2,4,2)substr($3,1,2)substr($3,4,2)substr($3,7,2)
               dretent[$6]=substr($5,7,2)substr($5,1,2)substr($5,4,2)
               group[$6]=$1
               client[$6]=$4
               level[$6]=$10
               nbfiles[$6]=$8
               taille[$6]=$7
               pool[$6]=$9
               isEll[$6]=match($11,"E")
               ss[$6]=$12
           }
           FS=";"
    }
    {
          #Traitement des sauvegarde a no
          #$1 $2.. correspond au champ du fichier TMPreport3
          if ( $1 == "no" ) {
             if ( existeSVG[$2":"$3":"$4] != "yes" ) {
                existeSVG[$2":"$3":"$4]="no"
             }
          }
          else {
          #Traitement des sauvegarde a yes
             ddebut="20"substr($6,7,2)substr($6,1,2)substr($6,4,2)substr($6,10,2)substr($6,13,2)substr($6,16,2)
             dfin="20"substr($7,7,2)substr($7,1,2)substr($7,4,2)substr($7,10,2)substr($7,13,2)substr($7,16,2)
             STATUS=$8
             if ($6 == ""){
                 DEBUT_SAUVEGARDE=""
             }
             else{
                 DEBUT_SAUVEGARDE=substr($6,4,2)"/"substr($6,1,2)"/"substr($6,7,2)" "substr($6,10,5)
             }
             if($7 == ""){
                 FIN_SAUVEGARDE=""
             }
             else{
                 FIN_SAUVEGARDE=substr($7,4,2)"/"substr($7,1,2)"/"substr($7,7,2)" "substr($7,10,5)
             }
             RETENTION=0
             NBSAVESETS=0
             LEVEL=""
             NBFILES=0
             TAILLE=0
             sase=""
             for (i in dsave) {
                if ( client[i] == $2 && group[i] == $5 && ddebut <= dsave[i] && dsave[i] <= dfin) {
                   NBSAVESETS+=1
                   if ( dretent[i] > RETENTION) RETENTION=dretent[i]
                   if ( LEVEL != "full" ) LEVEL=level[i]
                   NBFILES+=nbfiles[i]
                   TAILLE+=taille[i]
                   if (isEll[i] !=0) {recyc="E"} else {recyc=""}
                   if ( sase != "" ) {
                      sase=sase"
!"ss[i]
                   } else {
                      sase=ss[i]
                   }
                }
             }
 
             if ( RETENTION != 0 ) {
                RETENTION=substr(RETENTION,5,2)"/"substr(RETENTION,3,2)"/"substr(RETENTION,1,2)
                print $2";"$3";"$4";"$5";"$8";"DEBUT_SAUVEGARDE";"FIN_SAUVEGARDE";"int(TAILLE/1048576)";"RETENTION";"NBFILES";"NBSAV
ESETS";"LEVEL";"recyc";"sase";"$14
                existeSVG[$2":"$3":"$4]="yes"
             }
             else {
                print $2";"$3";"$4";"$5";"$8";"DEBUT_SAUVEGARDE";"FIN_SAUVEGARDE";"$11";"";"$12";"$10";"$9";E;"$13";"$14
                if ( existeSVG[$2":"$3":"$4] != "yes") {
                   existeSVG[$2":"$3":"$4]="no"
                }
             }
          }
    }
    END {
          if ( existonly == "no") {
             for (i in existeSVG) {
                if ( existeSVG[i] != "yes" ) {
                   split(i,memb,":")
                   print memb[1]";"memb[2]";"memb[3]";Nogroup;Disabled;;;;;;;;;"
                }
             }
          }
    }' | sort -t";" -k 2,2 > sortie