Bonjour!
J'ai un texte fichier programme1.out qui ressemble à ca :
connect to oracle (&conxora);
create table table1 as
select ID_PERS
from connection to oracle
(
select distinct pers.ID_PERS
FROM tab_grp grp , 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 = grp.id_pers
and (pers.date_supp_si is null or pers.date_supp_si > &date_quote)
order by id_pers
);
disconnect from oracle;
connect to oracle (&conxora);
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
);
disconnect from oracle;
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 :
table1;tab_grp;
table1;tab_pers;ID_PERS
table2;table_from1;ID_PRODUIT
table2;table_from1;CODE_PRODUIT
table2;table_from1;TOP_1
table2;table_from1;TOP_2
Sur mon pc sous ubuntu en bash ce script fonctionne :
var=$(cat programme1.out)
sed -n '/connect to oracle/,/disconnect from oracle/{s/connect to oracle (&conxora)\;//g;s/disconnect from oracle\;//g;s/\;/\n/g;p}' <<< $var | while read ligne
do
donnee=$(sed 's/^create table \(.*\) as select \(.*\) from connection .*from \(.*\) where ..*$/table="\1" nom_colonne="\2" nom_table_from="\3"/I' <<< $ligne)
eval $donnee
echo "$table
$nom_colonne
$nom_table_from
"
done
resultat:
table1
ID_PERS
tab_grp grp , tab_pers pers
table2
ID_PERS, ID_PRODUIT, CODE_PRODUIT, TOP_1 TOP_2
table_from1
table2
ID_PERS, ID_PRODUIT, CODE_PRODUIT, TOP_1 TOP_2
table_from1
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 :
var=$(cat programme1.out)
sed -n 's/connect to oracle (&conxora)\;//g;s/disconnect from oracle\;//g;s/\;/\n/g;p' <<< $var | while read ligne
do
donnee=$(sed 's/^create table \(.*\) as select \(.*\) from connection .*from \(.*\) where ..*$/table="\1" nom_colonne="\2" nom_table_from="\3"/I' <<< $ligne)
eval $donnee
echo "$table $nom_colonne $nom_table_from"
done
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
# Rien à voir
Posté par benoar . Évalué à 5.
(je ne connaissais même pas le triple <)
Sed sait lire dans un fichier, il te suffit juste de lui filer en argument :
sed -n 'blahblah' fichier
...
Quant à ton problème, je ne peux pas vraiment t'aider ...
[^] # Re: Rien à voir
Posté par benoar . Évalué à 2.
sed -ne 'blahblah' fichier
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.