Erreur avec sed [ksh ou bash] - Shell/Batch - Programmation
Marsh Posté le 05-05-2009 à 11:04:26
Les utilitaires unix (sed, awk, grep et consors) ne sont pas standardisés, et diffèrent donc entre les OS. Les outils GNU ne sont pas les mêmes que ceux d'AIX, de Solaris, d'HP-UX ou autres.
Il te faut donc potasser la manpage de sed.
Marsh Posté le 05-05-2009 à 14:48:54
Merci pour la réponse, je viens de mieux regarder le man et de la doc en ligne.
Apparemment il faudrait déja utiliser des " au lieu des ' pour sed, et l'option I pour ne pas tenir compte de la casse n'existe pas, j'ai donc fait l'essai avec ça :
Code :
|
j'obtiens maintenant cette erreur :
bash: eval: line 6: syntax error near unexpected token `('
bash: eval: line 6: `create table table1 as select ID_PERS from connection to oracle ( select distinct pers.ID_PERS FROM tab_grp g
rp , tab_pers pers where date_deb_grp <= &date_quote and (date_fin_grp is null or date_fin_grp > &date_quote) and pers.id_pers = g
rp.id_pers and (pers.date_supp_si is null or pers.date_supp_si > &date_quote) order by id_pers )n create table table2 as select ID
_PERS, ID_PRODUIT, CODE_PRODUIT, TOP_1 TOP_2 from connection to oracle ( select ID_PERS, ID_PRODUIT, CODE_PRODUIT, max (case when
(CODE ='01' ) then 1 else 0 end) as TOP_1 max (case when (CODE='02' ) then 1 else 0 end) as TOP_2 from table_from1 where CODE in (
'01','02') and ID_MOIS <= &id_mois group by ID_PERS,ID_PRODUIT )n'
Marsh Posté le 05-05-2009 à 15:02:14
urgh
Utilise tr pour convertir en upper case avant ton sed, ça t'évitera ta bidouille, rendra la chose plus lisible et te permettra de cerner le problème plus facilement.
Marsh Posté le 05-05-2009 à 15:21:00
Oui c'est vrai que ça devenait illisible...
Le fichier programme1.out contient donc maintenant
Code :
|
et avec ce script :
Code :
|
J'ai l'erreur :
bash: eval: line 6: syntax error near unexpected token `('
')nOUP BY ID_PERS,ID_PRODUIT THEN 1 ELSE 0 END) AS TOP_21ATE_QUOTE)
Marsh Posté le 05-05-2009 à 10:50:31
Bonjour!
J'ai un texte fichier programme1.out qui ressemble à ca :
A partir de ce fichier, il faudrait que je récupère pour chaque requête (entre connect to oracle et disconnect from oracle) le nom de la table créée, le nom des tables utilisées (celle dans les FROM, le vrai nom, pas l'alias) ainsi que les différentes colonnes sélectionnées dans le select.
A l'arrivée je voudrai avoir un affichage dans ce genre : table_cree | nom_table_from | nom_colonne
Exemple :
Sur mon pc sous ubuntu en bash ce script fonctionne :
resultat:
Cela n'est pas encore exactement ce que j'attend mais c'est déja un bon début.
Quand j'essaye ce script sur un environnement IBM UNIX AIX en bash j'obtient cette erreur :
sed: Function /connect to oracle/,/disconnect from oracle/{s/connect to oracle (&conxora)\;//g;s/disconnect from oracle\;//g;s/\;/
\n/g;p} cannot be parsed
Et en ksh :
ksh: syntax error: `<' unexpected (bon ça c'est normal le script est fait en bash)
En modifiant le premier sed j'ai une erreur sur le deuxième :
sed: Function s/^create table \(.*\) as select \(.*\) from connection .*from \(.*\) where ..*$/table="\1" nom_colonne="\2" nom_tab
le_from="\3"/I cannot be parsed
Vous avez une idée d'où peuvent venir ces erreurs? version de sed?
Merci
Message édité par stagebi le 05-05-2009 à 11:21:29