Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/10/2011, 13h56   #1
Futur Membre du Club
 
Inscription : février 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 12
Points : 19
Points : 19
Par défaut formatage fichier sortie à partir de différentes données

Bonjour,

Voici les données en question chaque variable (EC,QD,DP,HP)

Contiennnent le même nombre d'éléments (+-500 en liste)

et j'aimerais fusionner ces données pour obtenir un fichier de sortie formaté comme tel

EC,QD,DP,HP
EC,QD,DP,HP
EC,QD,DP,HP
EC,QD,DP,HP
...

JE ne vois pas vraiment comment procéder donc je fais appel a vos lumières

Code :
1
2
3
4
5
6
7
Nbrmess=`qmm dis $Qmgr:$Queue | grep 'Total messages selected:' | awk -F" " '{ print $5}' `
	  	qmm dis $Qmgr:MANAGE.DEAD.QUEUE detail > qmmdead.txt
	  	EC=`cat qmmdead.txt | grep "Reason message on dead-letter queue" | sed s/".*: "//g `
			QD=`cat qmmdead.txt | grep "Original destination queue" | sed s/".*: "//g ` 
			DP=`cat qmmdead.txt | grep "Date message put on dead queue" | sed s/".*: "//g `
			HP=`cat qmmdead.txt | grep "Time message put on dead queue " | sed s/".*: "//g `
	  	echo "PUTdate: $DP | PUThour: $HP | ERROR: $EC | Q: $QD "

J'espère avoir été suffisament précis dans ma requête ...
Merci d'avance
alexmirage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/10/2011, 17h21   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Bonjour,

la source est toujours la même (qmmdead.txt), qui est probablement un fichier temporaire, et inutile : tu devrais 'piper' la sortie de la commande qmm dis $Qmgr:MANAGE.DEAD.QUEUE detail vers une commande awk, qui formatera ça très proprement, plutôt qu'un tas de grep | sed consommateur de ressources et tout moche.

Il y a un tutoriel gawk, ici.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 05/10/2011, 08h16   #3
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par alexmirage Voir le message
Bonjour,

Voici les données en question chaque variable (EC,QD,DP,HP)

Contiennnent le même nombre d'éléments (+-500 en liste)
Salut

Ce serait bien d'avoir un petit exemple du fichier entrée...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 05/10/2011, 09h45   #4
Futur Membre du Club
 
Inscription : février 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 12
Points : 19
Points : 19
Voici un ex de qmmdead.txt

Code :
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
Queue: MANAGE.DEAD.QUEUE               Queue manager: MQRSDH12               
 
Relative position on queue  . . . . . . . . : 1
Message length (includes headers) . . . . . : 441
 
Message descriptor
  Structure identifier  . . . . . . . . . . : MD
  Structure version number  . . . . . . . . : 1
  Message type  . . . . . . . . . . . . . . : Reply
  Message lifetime in tenths of seconds . . : Unlimited
  Feedback or reason code . . . . . . . . . : None
  Data encoding . . . . . . . . . . . . . . : Native - UNIX
  Coded character set identifier  . . . . . : 819
  Format name . . . . . . . . . . . . . . . : MQDEAD
  Message priority  . . . . . . . . . . . . : 5
  Message persistence . . . . . . . . . . . : Message is not persistent
  Message identifier  . . . . . . . . . . . : C3E2D840D4D8C4F14040404040404040
                                              C871EF7D61974E04
  Correlation identifier  . . . . . . . . . : 414D51204D5152534448313220202020
                                              4E68383929860874
  Backout counter . . . . . . . . . . . . . : 0
  Name of reply-to queue  . . . . . . . . . : 
  Name of reply queue manager . . . . . . . : MQD1
 
  Identity Context
    User identifier . . . . . . . . . . . . : g66525
    Accounting token  . . . . . . . . . . . : ...
    Application data relating to identity . : 
 
  Origin Context
    Type of application that put the message: XCF
    Name of application that put the message: IMD1OTMAIMD1
    Date when message was put . . . . . . . : 20110929
    Time when message was put (GMT) . . . . : 06331729
    Application data relating to origin . . : 
 
Dead Letter Header
  Structure identifier  . . . . . . . . . . : DLH
  Structure version number  . . . . . . . . : 1
  Reason message on dead-letter queue . . . : Undefined object name
  Original destination queue  . . . . . . . : APPL.ALIAS.CK01101.REPLY
  Original destination queue manager  . . . : MQRSDH12
  Original data encoding  . . . . . . . . . : Native - UNIX
  Original coded charset identifier . . . . : 819
  Original format name  . . . . . . . . . . : MQIMS
  Type of appl that put msg on deadq  . . . : UNIX
  Name of appl that put msg on deadq  . . . : amqrmppa
  Date message put on dead queue  . . . . . : 20110929
  Time message put on dead queue (GMT)  . . : 06331731
 
IMS Information Header
  Structure identifier  . . . . . . . . . . : IIH
  Structure version number  . . . . . . . . : 1
  Length of MQIMS header  . . . . . . . . . : 84
  Format name of the data . . . . . . . . . : MQIMSVS
  Logical terminal override . . . . . . . . : 
  Message format services map name  . . . . : DFSMO5
  MQ format name of reply message . . . . . : 
  RACF password or passticket . . . . . . . : 
  Transaction instance identifier . . . . . : C871EF7B4A6194884040404040404040
  Transaction state . . . . . . . . . . . . : 32
  Commit mode . . . . . . . . . . . . . . . : 49
  Security scope  . . . . . . . . . . . . . : 32
 
IMS Variable String
  Length of IMS message . . . . . . . . . . : 78
  IMS flags . . . . . . . . . . . . . . . . : 0B00
  IMS DATA  . . . . . . . . . . . . . . . . : DFS555I TRAN CK01101  ABEND S000
                                              ,U4038 ; REASON=00000001; MSG IN
                                               PROCESS:
 
------------------------------------------------------------------------------
 
Relative position on queue  . . . . . . . . : 567
Message length (includes headers) . . . . . : 1198
 
Message descriptor
  Structure identifier  . . . . . . . . . . : MD
  Structure version number  . . . . . . . . : 1
  Message type  . . . . . . . . . . . . . . : Datagram - no reply
  Message lifetime in tenths of seconds . . : Unlimited
  Feedback or reason code . . . . . . . . . : None
  Data encoding . . . . . . . . . . . . . . : Native - UNIX
  Coded character set identifier  . . . . . : 819
  Format name . . . . . . . . . . . . . . . : MQDEAD
  Message priority  . . . . . . . . . . . . : 0
  Message persistence . . . . . . . . . . . : Message is persistent
  Message identifier  . . . . . . . . . . . : C3E2D840D4D8C4F14040404040404040
                                              C816535D35487105
  Correlation identifier  . . . . . . . . . : 40404040404040404040404040404040
                                              4040404040404040
  Backout counter . . . . . . . . . . . . . : 6
  Name of reply-to queue  . . . . . . . . . : 
  Name of reply queue manager . . . . . . . : MQD1
 
  Identity Context
    User identifier . . . . . . . . . . . . : b0pr17d
    Accounting token  . . . . . . . . . . . : ......@@....@@@@
    Application data relating to identity . : 
 
  Origin Context
    Type of application that put the message: IMS
    Name of application that put the message: IMD1    YSQS51
    Date when message was put . . . . . . . : 20110718
    Time when message was put (GMT) . . . . : 09501525
    Application data relating to origin . . : 
 
Dead Letter Header
  Structure identifier  . . . . . . . . . . : DLH
  Structure version number  . . . . . . . . : 1
  Reason message on dead-letter queue . . . : Queue is full
  Original destination queue  . . . . . . . : APPL.ALIAS.EOIQ.SOM2LIQFBK
  Original destination queue manager  . . . : 
  Original data encoding  . . . . . . . . . : Native - UNIX
  Original coded charset identifier . . . . : 819
  Original format name  . . . . . . . . . . : MQSTR
  Type of appl that put msg on deadq  . . . : UNIX
  Name of appl that put msg on deadq  . . . : amqrmppa
  Date message put on dead queue  . . . . . : 20110718
  Time message put on dead queue (GMT)  . . : 13590555
 
Message text  . . . . . . . . . . . . . . . : 
 
:)
 
------------------------------------------------------------------------------
 
Relative position on queue  . . . . . . . . : 2480
Message length (includes headers) . . . . . : 408
 
Message descriptor
  Structure identifier  . . . . . . . . . . : MD
  Structure version number  . . . . . . . . : 1
  Message type  . . . . . . . . . . . . . . : Datagram - no reply
  Message lifetime in tenths of seconds . . : Unlimited
  Feedback or reason code . . . . . . . . . : None
  Data encoding . . . . . . . . . . . . . . : Native - UNIX
  Coded character set identifier  . . . . . : 819
  Format name . . . . . . . . . . . . . . . : MQDEAD
  Message priority  . . . . . . . . . . . . : 0
  Message persistence . . . . . . . . . . . : Message is not persistent
  Message identifier  . . . . . . . . . . . : 414D51204D5152534448313220202020
                                              4E68383924F43125
  Correlation identifier  . . . . . . . . . : 414D51204D5152534448313220202020
                                              4D2C1D122029F607
  Backout counter . . . . . . . . . . . . . : 0
  Name of reply-to queue  . . . . . . . . . : 
  Name of reply queue manager . . . . . . . : MQRSDH12
 
  Identity Context
    User identifier . . . . . . . . . . . . : g65868
    Accounting token  . . . . . . . . . . . : 665868
    Application data relating to identity . : 
 
  Origin Context
    Type of application that put the message: 26
    Name of application that put the message: MQRSDH12
    Date when message was put . . . . . . . : 20110912
    Time when message was put (GMT) . . . . : 13475221
    Application data relating to origin . . : 
 
Dead Letter Header
  Structure identifier  . . . . . . . . . . : DLH
  Structure version number  . . . . . . . . : 1
  Reason message on dead-letter queue . . . : User not authorized
  Original destination queue  . . . . . . . : MB.ALIAS.MQMA.MQEVENTS
  Original destination queue manager  . . . : 
  Original data encoding  . . . . . . . . . : Native - UNIX
  Original coded charset identifier . . . . : 819
  Original format name  . . . . . . . . . . : MQEVENT
  Type of appl that put msg on deadq  . . . : QMGR
  Name of appl that put msg on deadq  . . . : MQRSDH12
  Date message put on dead queue  . . . . . : 20110912
  Time message put on dead queue (GMT)  . . : 13475221
 
Event Message
 
  Structure type  . . . . . . . . . . . . . : Event
  Structure length  . . . . . . . . . . . . : 36
  Structure version number  . . . . . . . . : 1
  Command identifier  . . . . . . . . . . . : Q_MGR_EVENT
  Message sequence number . . . . . . . . . : 1
  Control options . . . . . . . . . . . . . : Last message in group
  Completion code . . . . . . . . . . . . . : WARNING
  Reason code qualifying completion code  . : UNKNOWN_OBJECT_NAME
  Count of parameter structures . . . . . . : 4
 
  PCF String Parameter (1)
    Structure type  . . . . . . . . . . . . : STRING
    Structure length  . . . . . . . . . . . : 68
    Parameter identifier  . . . . . . . . . : Q_MGR_NAME
    Coded character set identifier  . . . . : 0
    Length of string  . . . . . . . . . . . : 48
    String value  . . . . . . . . . . . . . : MQRSDH12
 
  PCF Integer Parameter
    Structure type  . . . . . . . . . . . . : INTEGER
    Structure length  . . . . . . . . . . . : 16
    Parameter identifier  . . . . . . . . . : APPL_TYPE
    Parameter value . . . . . . . . . . . . : 6
 
  PCF String Parameter (2)
    Structure type  . . . . . . . . . . . . : STRING
    Structure length  . . . . . . . . . . . : 48
    Parameter identifier  . . . . . . . . . : APPL_NAME
    Coded character set identifier  . . . . : 0
    Length of string  . . . . . . . . . . . : 28
    String value  . . . . . . . . . . . . . : ces\BB_DataSourceService.exe
 
  PCF String Parameter (3)
    Structure type  . . . . . . . . . . . . : STRING
    Structure length  . . . . . . . . . . . : 68
    Parameter identifier  . . . . . . . . . : Q_NAME
    Coded character set identifier  . . . . : 0
    Length of string  . . . . . . . . . . . : 48
    String value  . . . . . . . . . . . . . : APPL.ALIAS.YSBBASA1
et voici ce que contiendrait mes variables si j'utilisais ce fichier

EC =
Code :
1
2
3
Undefined object name
Queue is full
User not authorized
DP =
Code :
1
2
3
20110929
20110718
20110912
HP =
Code :
1
2
3
06331731
09501525
13475221
QD =
Code :
1
2
3
APPL.ALIAS.CK01101.REPLY
APPL.ALIAS.EOIQ.SOM2LIQFBK
MB.ALIAS.MQMA.MQEVENTS
Le OUTFILE désiré

Code :
1
2
3
APPL.ALIAS.CK01101.REPLY - 20110929 - 06331731 - Undefined object name
APPL.ALIAS.EOIQ.SOM2LIQFBK - 20110718 - 09501525 - Queue is full
MB.ALIAS.MQMA.MQEVENTS - 20110912 - 13475221 - User not authorized
et éventuellement donner le nombre d'occurence de chaque destination queue ( equivaut au nombre de messages qui doivent arriver dans cette queue)
alexmirage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/10/2011, 14h30   #5
Membre habitué
 
Avatar de Levi59
 
Homme
Étudiant
Inscription : août 2011
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 46
Points : 126
Points : 126
Code :
1
2
3
4
5
qmm dis $Qmgr:MANAGE.DEAD.QUEUE detail > qmmdead.txt           
EC=`cat qmmdead.txt | grep "Reason message on dead-letter queue" | sed s/".*: "//g `
QD=`cat qmmdead.txt | grep "Original destination queue" | sed s/".*: "//g`
DP=`cat qmmdead.txt | grep "Date message put on dead queue" | sed s/".*: "//g `
HP=`cat qmmdead.txt | grep "Time message put on dead queue " | sed s/".*: "//g `

j'aurais plutot utilisé :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
EC=();QD=();DP=();HP=()
while read
do
    [[ $REPLY =~ "Reason message on dead-letter queue" ]] && EC+=( "${REPLY##*: }" )
    [[ $REPLY =~ "Original destination queue" ]] && QD+=( "${REPLY##*: }" )
    [[ $REPLY =~ "Date message put on dead queue" ]] && DP+=( "${REPLY##*: }" )
    [[ $REPLY =~ "Time message put on dead queue" ]] && HP+=( "${REPLY##*: }" )
done < <(qmm dis $Qmgr:MANAGE.DEAD.QUEUE detail)
 
for i in {0..2}
do
    echo ${EC[$i]} - ${QD[$i]} - ${DP[$i]} - ${HP[$i]} >> fichier.log
done
Edit :
J'ai corrigé une erreur... (j'avais fais ça à l'arrache désolé)
__________________
Carpe Diem
Levi59 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 05/10/2011, 16h11   #6
Futur Membre du Club
 
Inscription : février 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 12
Points : 19
Points : 19
Merci pour ta réponse ...


Malheureusement j'ai du mal a suivre le code que tu as donné.

J'avais d'abord tenté 4 boucles while imbriquées mais il semble que lorsqu'il arrive au dernier mot de la derniere variable il recommence au début ... => kill obligatoire

Alors pardonnes mon ignorance(ignardise) mais j'ai du mal à interpreter le morceau de code que tu as mis.

Peux-tu m'expliquer un peu ?

Merci d'avance

Bien à toi
alexmirage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/10/2011, 16h43   #7
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Juste une proposition...

Si au lieu de créer 4 variables tu créais 4 fichiers, il serait alors plus facile de passer le tout à la moulinette "paste" (éventuellement coupler à sed pour la mise en forme) ?

Code :
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
$ cat EC 
Undefined object name
Queue is full
User not authorized
 
$ cat DP 
20110929
20110718
20110912
 
$ cat QD 
APPL.ALIAS.CK01101.REPLY
APPL.ALIAS.EOIQ.SOM2LIQFBK
MB.ALIAS.MQMA.MQEVENTS
 
$ cat HP 
06331731
09501525
13475221
 
$ paste QD DP HP EC |  sed 's/\t/ - /g'
APPL.ALIAS.CK01101.REPLY - 20110929 - 06331731 - Undefined object name
APPL.ALIAS.EOIQ.SOM2LIQFBK - 20110718 - 09501525 - Queue is full
MB.ALIAS.MQMA.MQEVENTS - 20110912 - 13475221 - User not authorized
 
$
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 05/10/2011, 17h40   #8
Membre habitué
 
Avatar de Levi59
 
Homme
Étudiant
Inscription : août 2011
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 46
Points : 126
Points : 126
Citation:
Envoyé par Levi59
j'aurais plutot utilisé :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
EC=();QD=();DP=();HP=()
while read
do
    [[ $REPLY =~ "Reason message on dead-letter queue" ]] && EC+=( "${REPLY##*: }" )
    [[ $REPLY =~ "Original destination queue" ]] && QD+=( "${REPLY##*: }" )
    [[ $REPLY =~ "Date message put on dead queue" ]] && DP+=( "${REPLY##*: }" )
    [[ $REPLY =~ "Time message put on dead queue" ]] && HP+=( "${REPLY##*: }" )
done < <(qmm dis $Qmgr:MANAGE.DEAD.QUEUE detail)
 
for i in {0..2}
do
    echo ${EC[$i]} - ${QD[$i]} - ${DP[$i]} - ${HP[$i]} >> fichier.log
done
Edit :
J'ai corrigé une erreur... (j'avais fais ça à l'arrache désolé)
En gros c'est assez simple :
-D'abord c'est du bash, je ne suis pas sûr des compatibilités avec d'autres langages.
-la boucle while read; do... done < <(commande) lit le retour de la commande et place chaque ligne dans la variable $REPLY (la lecture se fait ligne par ligne, un ligne par itération). Normalement, une fois toutes les lignes lus, elle devrait s'arreter...

À un temps t, on aurait donc par exemple
$REPLY="Message lifetime in tenths of seconds . . : Unlimited"

-Comme on veut juste récupérer certaines infos, on compare $REPLY à un motif et si on retrouve le motif, on stock la partie voulue (après ":") grace à la substitution ${var##*: } qui va tout supprimer jusqu'au dernier ": "
dans l'exemple précédent, on aura
${REPLY##*: }="Unlimited"
j'en profite pour stocker les données dans des tableaux afin de les ranger facilement et proprement dans le fichier.log. Par contre j'ai limité la boucle for...done à 3 occurences pour correspondre à ton exemple mais il faudra surement adapter pour un nombre variable en comptant le nombre d'éléments dans une des listes HP, QD...
__________________
Carpe Diem
Levi59 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 06/10/2011, 10h42   #9
Futur Membre du Club
 
Inscription : février 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 12
Points : 19
Points : 19
Un grand merci a vous 2 grace à vous je commence a voir la solution apparaitre devant mes yeux...

Cependant il me reste un problème sachant qu'il peut y avoir jusqu'a 10000 ou 20000 messages voir plus

j'obtiens ce message d'erreur

Code :
./mailer.ksh[13]: 0403-029 There is not enough memory available now.
Avec ce code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
deadQ()
{
Queue=MANAGE.DEAD.QUEUE
Nbrmess=`qmm dis $Qmgr:$Queue | grep 'Total messages selected:' | awk -F" " '{ print $5}' `	
EC="";QD="";DP="";HP=""
     while read
           do
               `[[ $REPLY =~ "Reason message on dead-letter queue" ]] && EC+=( "${REPLY##*: }" )`
               `[[ $REPLY =~ "Original destination queue" ]] && QD+=( "${REPLY##*: }" )`
               `[[ $REPLY =~ "Date message put on dead queue" ]] && DP+=( "${REPLY##*: }" )`
               `[[ $REPLY =~ "Time message put on dead queue" ]] && HP+=( "${REPLY##*: }" )`
           done << `qmm dis $Qmgr:MANAGE.DEAD.QUEUE detail`
 
for i in {0..($Nbrmess-1)}
     do
         echo ${EC[$i]} - ${QD[$i]} - ${DP[$i]} - ${HP[$i]} > result.txt
     done 
}

Lorsque j'utilise une Queue qui ne contient que 3 messages pour tester

j'obtiens ceci

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 ./mailer.ksh -i blabla@cie.com -m MQRSDH12
+ NORMAL=\033[0;39m
+ SUCCESS=\033[1;32m
+ WARNING=\033[1;33m
+ FAILURE=\033[1;31m
+ Queue=
+ getopts :m:q:i: OPT
+ Mail=blabla@cie.com
+ getopts :m:q:i: OPT
+ Qmgr=MQRSDH12
+ getopts :m:q:i: OPT
+ [ -z MQRSDH12 ]
+ [ == ]
+ deadQ
A file or path name is too long.
./mailer.ksh[13]: ^JQueue: TEST.ALEX                       Queue manager: MQRSDH12               ^J^JRelative position on queue  . . . . . . . . : 1^JMessage length (includes headers) . . . . . : 269^J^JMessage descriptor^J  Structure identifier  . . . . . . . . . . : MD^J  Structure version number  . . . . . . . . : 1^J  Message type  . . . . . . . . . . . . . . : Reply^J  Message lifetime in tenths of seconds . . : Unlimited^J  Feedback or reason code . . . . . . . . . : None^J  Data encoding . . . . . . . . . . . . . . : Native - UNIX^J  Coded character set identifier  . . . . . : 819^J  Format name . . . . . . . . . . . . . . . : MQIMS^J  Message priority  . . . . . . . . . . . . : 5^J  Message persistence . . . . . . . . . . . : Message is not persistent^J  Message identifier  . . . . . . . . . . . : C3E2D840D4D8C4F14040404040404040^J                                              C871EF7D61974E04^J  Correlation identifier  . . . . . . . . . : 414D51204D5152534448313220202020^J                                              4E68383929860874^J  Backout counter . . . . . . . . . . . . . : 0^J  Name of reply-to queue  . . . . . . . . . : ^J  Name of reply queue manager . . . . . . . : MQD1^J^J  Identity Context^J    User identifier . . . . . . . . . . . . : g66525^J    Accounting token  . . . . . . . . . . . : ...^J    Application data relating to identity . : ^J^J  Origin Context^J    Type of application that put the message: XCF^J    Name of application that put the message: IMD1OTMAIMD1^J    Date when message was put . . . . . . . : 20110929^J    Time when message was put (GMT) . . . . : 06331729^J    Application data relating to origin . . : ^J^JIMS Information Header^J  Structure identifier  . . . . . . . . . . : IIH^J  Structure version number  . . . . . . . . : 1^J  Length of MQIMS header  . . . . . . . . . : 84^J  Format name of the data . . . . . . . . . : MQIMSVS^J  Logical terminal override . . . . . . . . : ^J  Message format services map name  . . . . : DFSMO5^J  MQ format name of reply message . . . . . : ^J  RACF password or passticket . . . . . . . : ^J  Transaction instance identifier . . . . . : C871EF7B4A6194884040404040404040^J  Transaction state . . . . . . . . . . . . : 32^J  Commit mode . . . . . . . . . . . . . . . : 49^J  Security scope  . . . . . . . . . . . . . : 32^J^JIMS Variable String^J  Length of IMS message . . . . . . . . . . : 78^J  IMS flags . . . . . . . . . . . . . . . . : 0B00^J  IMS DATA  . . . . . . . . . . . . . . . . : DFS555I TRAN CK01101  ABEND S000^J                                              ,U4038 ; REASON=00000001; MSG IN^J                                               PROCESS:^J^J------------------------------------------------------------------------------^JRelative position on queue  . . . . . . . . : 2^JMessage length (includes headers) . . . . . : 931^J^JMessage descriptor^J  Structure identifier  . . . . . . . . . . : MD^J  Structure version number  . . . . . . . . : 1^J  Message type  . . . . . . . . . . . . . . : Datagram - no reply^J  Message lifetime in tenths of seconds . . : Unlimited^J  Feedback or reason code . . . . . . . . . : None^J  Data encoding . . . . . . . . . . . . . . : Native - UNIX^J  Coded character set identifier  . . . . . : 819^J  Format name . . . . . . . . . . . . . . . : MQSTR^J  Message priority  . . . . . . . . . . . . : 0^J  Message persistence . . . . . . . . . . . : Message is persistent^J  Message identifier  . . . . . . . . . . . : C3E2D840D4D8C4F14040404040404040^J                                              C816410F6CB8990A^J  Correlation identifier  . . . . . . . . . : 40404040404040404040404040404040^J                                              4040404040404040^J  Backout counter . . . . . . . . . . . . . : 0^J  Name of reply-to queue  . . . . . . . . . : ^J  Name of reply queue manager . . . . . . . : MQD1^J^J  Identity Context^J    User identifier . . . . . . . . . . . . : b0pr17d^J    Accounting token  . . . . . . . . . . . : ......@@....@@@@^J    Application data relating to identity . : ^J^J  Origin Context^J    Type of application that put the message: IMS^J    Name of application that put the message: IMD1    YSQS51^J    Date when message was put . . . . . . . : 20110718^J    Time when message was put (GMT) . . . . : 08282184^J    Application data relating to origin . . : ^J^JMessage text  . . . . . . . . . . . . . . . : ^J     B0010128          00000931SYC1    YSYSQS51  20110718093616               ^J                                                            FY01              ^J           LIQSYNBE00515357    210        20110718102800 ACK/1028/18GEBABEBBI0^J     EO056439                                                                 ^J                                                                              ^J                                                                              ^J                                                                              ^J                                                                              ^J                                                          LIQSYNBE00515357    ^J                                   00000236{1:F21GEBABEBBX36A0000000000}{4:{17^J     7:1107181028}{451:0}}{1:F01GEBABEBBX36A9999999999}{2:I210GEBABEBBXPAYN}{4^J     :.^J     :20:LIQSYNBE00515357.^J     :30:100128.^J     :21:PINGUIN 140MM EU.^J     :32B:EUR314,73.^J     :52A:BBRUBEBBXXX.^J     :56A:/227835070053.^J     GEBABEBB36A.^J     -}^J^J------------------------------------------------------------------------------^JRelative position on queue  . . . . . . . . : 3^JMessage length (includes headers) . . . . . : 930^J^JMessage descriptor^J  Structure identifier  . . . . . . . . . . : MD^J  Structure version number  . . . . . . . . : 1^J  Message type  . . . . . . . . . . . . . . : Datagram - no reply^J  Message lifetime in tenths of seconds . . : Unlimited^J  Feedback or reason code . . . . . . . . . : None^J  Data encoding . . . . . . . . . . . . . . : Native - UNIX^J  Coded character set identifier  . . . . . : 819^J  Format name . . . . . . . . . . . . . . . : MQSTR^J  Message priority  . . . . . . . . . . . . : 0^J  Message persistence . . . . . . . . . . . : Message is persistent^J  Message identifier  . . . . . . . . . . . : C3E2D840D4D8C4F14040404040404040^J                                              C816410F76229616^J  Correlation identifier  . . . . . . . . . : 40404040404040404040404040404040^J                                              4040404040404040^J  Backout counter . . . . . . . . . . . . . : 0^J  Name of reply-to queue  . . . . . . . . . : ^J  Name of reply queue manager . . . . . . . : MQD1^J^J  Identity Context^J    User identifier . . . . . . . . . . . . : b0pr17d^J    Accounting token  . . . . . . . . . . . : ......@@....@@@@^J    Application data relating to identity . : ^J^J  Origin Context^J    Type of application that put the message: IMS^J    Name of application that put the message: IMD1    YSQS51^J    Date when message was put . . . . . . . : 20110718^J    Time when message was put (GMT) . . . . : 08282188^J    Application data relating to origin . . : ^J^JMessage text  . . . . . . . . . . . . . . . : ^J     B0010128          00000930SYC1    YSYSQS51  20110718093616               ^J                                                            FY01              ^J           LIQSYNBE00515359    210        20110718102800 ACK/1028/18GEBABEBBI0^J     EO056440                                                                 ^J                                                                              ^J                                                                              ^J                                                                              ^J                                                                              ^J                                                          LIQSYNBE00515359    ^J                                   00000235{1:F21GEBABEBBX36A0000000000}{4:{17^J     7:1107181028}{451:0}}{1:F01GEBABEBBX36A9999999999}{2:I210GEBABEBBXPAYN}{4^J     :.^J     :20:LIQSYNBE00515359.^J     :30:100222.^J     :21:WINSOL 42MM EUR.^J     :32B:EUR349,13.^J     :52A:BBRUBEBBXXX.^J     :56A:/227835070053.^J     GEBABEBB36A.^J     -}^J^JBMCQMM307I Total messages selected: 3^JBMCQMM200I DIS command completed with condition code 0  : 0403-016 Cannot find or open the file.
alexmirage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/10/2011, 11h40   #10
Membre habitué
 
Avatar de Levi59
 
Homme
Étudiant
Inscription : août 2011
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 46
Points : 126
Points : 126
Citation:
Envoyé par alexmirage Voir le message
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
deadQ()
{
Queue=MANAGE.DEAD.QUEUE
Nbrmess=`qmm dis $Qmgr:$Queue | grep 'Total messages selected:' | awk -F" " '{ print $5}' `    
EC="";QD="";DP="";HP=""
     while read
           do
               `[[ $REPLY =~ "Reason message on dead-letter queue" ]] && EC+=( "${REPLY##*: }" )`
               `[[ $REPLY =~ "Original destination queue" ]] && QD+=( "${REPLY##*: }" )`
               `[[ $REPLY =~ "Date message put on dead queue" ]] && DP+=( "${REPLY##*: }" )`
               `[[ $REPLY =~ "Time message put on dead queue" ]] && HP+=( "${REPLY##*: }" )`
           done << `qmm dis $Qmgr:MANAGE.DEAD.QUEUE detail`
 
for i in {0..($Nbrmess-1)}
     do
         echo ${EC[$i]} - ${QD[$i]} - ${DP[$i]} - ${HP[$i]} > result.txt
     done 
}
Je dis peut etre une bétise mais pourquoi avoir mis les commande de la boucle while entre `` ? Normalement tu n'as pas à le faire... les `` s'utilisent pour définir une variable.

Idem pour l'initialisation des tableaux. Pourquoi avoir remplacé par ' EC="";QD="";DP="";HP="" ' ?

Edit :
ok pour les tableaux la notation n'est pas la même que en bash, je croyais qu'on devait cependant ecrire :
Code :
set -A EC ; set -A QD ; set -A DP ; set -A HP
non?

Edit 2 :
Code :
Queue=MANAGE.DEAD.QUEUE
essaye de remplacer par
Code :
Queue="MANAGE.DEAD.QUEUE"
Edit 3 :
Tu as aussi modifié la redirection de la boucle while... Je ne suis même pas sûr que ça puisse marcher ainsi.
en bash c'est while read;do ... done < <(commande)
à voir avec les pros du ksh pour régler ça.
__________________
Carpe Diem
Levi59 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 06/10/2011, 18h29   #11
Membre habitué
 
Avatar de Levi59
 
Homme
Étudiant
Inscription : août 2011
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 46
Points : 126
Points : 126
Je double post pour proposer une version fonctionnelle sous ksh :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/ksh
 
deadQ()
{
set -A EC;set -A QD;set -A DP;set -A HP
 
Queue="MANAGE.DEAD.QUEUE"
qmm dis $Qmgr:$Queue detail | while read
do
    [[ $REPLY =~ "Reason message on dead-letter queue" ]] && EC+=( "${REPLY##*: }" )
    [[ $REPLY =~ "Original destination queue" ]] && QD+=( "${REPLY##*: }" )
    [[ $REPLY =~ "Date message put on dead queue" ]] && DP+=( "${REPLY##*: }" )
    [[ $REPLY =~ "Time message put on dead queue" ]] && HP+=( "${REPLY##*: }" )
done
 
> fichier.log 
for i in {0..$((${#EC[@]}-1))}
do
    echo ${EC[$i]} - ${QD[$i]} - ${DP[$i]} - ${HP[$i]} >> fichier.log
done
}
__________________
Carpe Diem
Levi59 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 07/10/2011, 15h22   #12
Futur Membre du Club
 
Inscription : février 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 12
Points : 19
Points : 19
tout d'abord un tout grand merci à toi pour ce suivi c 'est génial !

Mais voila je viens de tester ta procédure modifiée

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/ksh
 
deadQ()
{
set -A EC;set -A QD;set -A DP;set -A HP
 
Queue="MANAGE.DEAD.QUEUE"
qmm dis $Qmgr:$Queue detail | while read
do
    [[ $REPLY =~ "Reason message on dead-letter queue" ]] && EC+=( "${REPLY##*: }" )
    [[ $REPLY =~ "Original destination queue" ]] && QD+=( "${REPLY##*: }" )
    [[ $REPLY =~ "Date message put on dead queue" ]] && DP+=( "${REPLY##*: }" )
    [[ $REPLY =~ "Time message put on dead queue" ]] && HP+=( "${REPLY##*: }" )
done
 
> fichier.log 
for i in {0..$((${#EC[@]}-1))}
do
    echo ${EC[$i]} - ${QD[$i]} - ${DP[$i]} - ${HP[$i]} >> fichier.log
done
}

premier run

Code :
1
2
Syntax error line 71 : =~  is not expected
{0..-1} : syntax error
impossible pour moi de comprendre le {0..$((${#EC[@]}-1))}
donc je remplace par {0..$(($Nbrmess-1))} qui devrait me donner le nombre de ligne dans le fichier en commencant à 0

j'arrange le soucis en plaçant des `` dans le while

Code :
1
2
Syntax error line 1 : =~  is not expected
{0..2952} : syntax error


ca semble mieux mais il ya toujours un soucis et j'ai beau retourner le tout je me demande ou cette erreur de syntax se trouve ....

keep searching solution


Quoi qu'il en soit encore un tout grand merci pour ton aide!
alexmirage est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h07.


 
 
 
 
Partenaires

Hébergement Web