|
Publicité | ||||||||||||||||||||||
|
|
#1 | ||
|
Membre confirmé
![]() Dany GDéveloppeur Java Inscription : décembre 2005 Messages : 496 ![]() |
Bonjour,
Dans un script Shell, j'exécute une requête SQL de sélection à l'aide de la commande "sqlplus". Voici le résultat de cette requête : Code :
On m'a conseillé d'utiliser la commande awk, mais je ne sais pas du tout comment l'utiliser donc si quelqu'un sait comment faire... Merci d'avance Dany
__________________
"Wash me away Clean your body of me Erase all the memories They'll only bring us pain And I've seen All i'll ever need" |
||
|
|
00
|
|
|
#2 | ||||
|
Membre éclairé
![]() Ingénieur Inscription : janvier 2009 Messages : 268 ![]() |
C'est assez dur de te répondre sans faire, grosso modo, tout le boulot si tu ne connais pas awk. C'est bien une "commande" mais c'est surtout un interpréteur. Donc apprendre à s'en servir c'est un peu comme apprendre la programmation en shell (le "User's guide" de GNU awk fait 360 pages ...). Comme ton post est resté sans réponse depuis un petit bout de temps, je m'y colle.
Comme tu ne connais pas awk, je vais rester dans le général et les comportements par défaut. En gros, awk est un processeur de fichiers texte. Il va traiter les lignes, l'une après l'autre, et découper chaque ligne en champs/fields (par défaut, les séparateurs de champs sont les espaces et les tabulations). Dans le script, $0 représente toute la ligne courante, $1,$2,$3, etc... les champs. Dans un script awk, tu peux traiter toutes les lignes ou des lignes qui vont "matcher" une expression régulière. Dans ton exemple, on va traiter chaque ligne pour la copier dans un fichier et on va traiter spécifiquement les lignes qui commencent par "[ticket". Tu peux aussi avoir une partie "BEGIN" qui est exécutée 1 seule fois avant d'attaquer la première ligne et une partie "END" qui est exécutée 1 seule fois aussi, après le traitement de la dernière ligne. Pour que tu vois à quoi ça ressemble, un premier script, avec beaucoup (trop) de commentaires, qui va créer des fichiers "group_1", "group_2", etc... avec à chaque fois le contenu de 3 tickets (sauf peut-être pour le dernier groupe où ça peut aussi être 1 ou 2 tickets). Code :
Si ce script est sauvegardé en "version1.awk" et que ton fichier à traiter s'appelle "source", tu lances, par exemple, "awk -f version.awk source" et tu récupèreras "group_1" et "group_2" dans le répertoire courant Pendant que j'y étais, j'ai fait une deuxième version qui crée des fichiers groupes dont le nom reprend les numéros des tickets contenus. Là, tu es obligé de mémoriser les lignes lues car tu dois attendre le dernier ticket pour constituer le nom du fichier en sortie. De cette façon, ça me permet de te montrer comment définir ta propre fonction. (On pourrait se contenter de modifier la première version en mémorisant les numéros des tickets et renommer group_1, group_2 mais on est là pour apprendre et voir à quoi ça ressemble) Code :
Là aussi, un "awk -f version2.awk source" te créera deux fichiers, ici "group_36_39_40" et "group_48_63" Maintenant, tu sais à quoi ça ressemble. Awk est parfois bien utile mais, quand les scripts sont gros, ça peut devenir l'horreur à débuguer. Quant aux messages d'erreurs, ils sont parfois assez "brut de fonderie" et on ne voit pas toujours ce qui cloche. |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com