| Salut, $ cat fichier.txt
texte texte texte texte texte
texte texte texte
motcle1
texte texte
texte
texte texte texte
motcle2
texte texte
texte
$ perl -ne 's/\n/ / if /motcle1/../motcle2/;s/motcle2 /\nmotcle2\n/;print' fichier.txt
texte texte texte texte texte
texte texte texte
motcle1 texte texte texte texte texte texte
motcle2
texte texte
texte
106485010510997108 Répondre à lami20j | 18 vanhell, le 22 mai 2009 à 10:31:11Salut,
Merci ça fonctionne bien, même un peu trop lol j'explique :
$cat fictest
CONNECT TO ORACLE (&CONXORA);
CREATE TABLE ALIAS.TABLECREEE AS
SELECT ID_PERS,
ID_GRP_PERS, AGE_PERS
NB_ENF, MAX('GRP') AS MAXG
FROM TAB_PERS_GRP_PERS
WHERE DATE_DEB <= &DATE_FIN
AND (DATE_FIN IS NULL OR DATE_DEB > &DATE_FIN)
);
DISCONNECT FROM ORACLE;
perl -ne 's/\n/ / if /SELECT/../FROM/;s/FROM /\nFROM\n/;print' fictest
CONNECT TO ORACLE (&CONXORA);
CREATE TABLE ALIAS.TABLECREEE AS
SELECT ID_PERS, ID_GRP_PERS, AGE_PERS NB_ENF, MAX('GRP') AS MAXG
FROM
TAB_PERS_GRP_PERS WHERE DATE_DEB <= &DATE_FIN
AND (DATE_FIN IS NULL OR DATE_DEB > &DATE_FIN)
);
DISCONNECT
FROM
ORACLE;
Il faudrait que ça change juste entre SELECT et FROM donc ça c'est bon, mais la ça rajoute aussi un retour à la ligne après FROM et des retour à la ligne apres chaque mot de la dernière ligne (si ça peut aider pour ne pas prendre en compte "DISCONNECT FROM ORACLE" , les mots clés "SELECT" et "FROM" sont toujours en début de ligne.
Merci d'avance Répondre à vanhell | Essaye comme ça : perl -ne 's/\n/ / if /SELECT/../^FROM/;s/^FROM /\nFROM /;print' ;-))
$ man woman
Il n'y a pas de page de manuel pour woman. Répondre à jipicy | 20 vanhell, le 22 mai 2009 à 10:52:32Presque!
Ca fonctionne mais ça enleve toujours le retour a la ligne avant le "WHERE"
J'obtient ça :
CONNECT TO ORACLE (&CONXORA);
CREATE TABLE ALIAS.TABLECREEE AS
SELECT ID_PERS, ID_GRP_PERS, AGE_PERS NB_ENF, MAX('GRP') AS MAXG
FROM TAB_PERS_GRP_PERS WHERE DATE_DEB <= &DATE_FIN
AND (DATE_FIN IS NULL OR DATE_DEB > &DATE_FIN)
);
DISCONNECT FROM ORACLE;
et il faudrait ça :
CONNECT TO ORACLE (&CONXORA);
CREATE TABLE ALIAS.TABLECREEE AS
SELECT ID_PERS, ID_GRP_PERS, AGE_PERS NB_ENF, MAX('GRP') AS MAXG
FROM TAB_PERS_GRP_PERS
WHERE DATE_DEB <= &DATE_FIN
AND (DATE_FIN IS NULL OR DATE_DEB > &DATE_FIN)
);
DISCONNECT FROM ORACLE; Répondre à vanhell | Va falloir attendre lami20j, n'étant pas un grand spécialiste de Perl pour ma part, désolé ;-(
Sinon, j'ai ça avec "ed" (essaie on sait jamais) : echo 'H
/SELECT/,/^FROM/g/$/s/.$/& /g
/SELECT/,/^FROM/-1j
,p' | ed -s fic ;-))
$ man woman
Il n'y a pas de page de manuel pour woman. Répondre à jipicy | 22 vanhell, le 22 mai 2009 à 11:37:19Merci ça fonctionne sur la plupart des fichiers mais ne fait rien sur certain, exactement comme la solution que j'ai en awk (cf plus bas)
La solution en perl de lami20j fonctionne sur tous les fichiers mais malheuresement il reste un petit truc qui ne va pas (la suppresion du retour à la ligne avant le WHERE)
Ma solution en awk :
awk ' /^SELECT$/ { i=1 }; i==1 { if ( $0 ~ /^FROM$/) { print ligne; i=0} else { if (ligne == "") {ligne=$0} else {ligne=ligne" "$0} }} i==0 ' fichier Répondre à vanhell | mais ne fait rien sur certain,
On peut avoir un exempl(e|aire) de ces fameux fichiers ?
$ man woman
Il n'y a pas de page de manuel pour woman. Répondre à jipicy | 24 vanhell, le 22 mai 2009 à 12:04:53En faite je viens de tester à l'instant, quand je lance la commande (celle avec ed) sur le fichier, une partie du fichier est bien transformé mais pas tout, donc j'ai copié une petite partie du fichier qui n'était pas transformé dans un autre fichier et quand je lance la commande sur ce nouveau fichier ça fonctionne.
Je ne peux pas copier tout le fichier ici il est trop gros, je peux te l'envoyer par mail? Répondre à vanhell | Oui envoie à l'adresse dans mon profil.
$ man woman
Il n'y a pas de page de manuel pour woman. Répondre à jipicy |
|
|
|
|
| Salut,
Presque!
Oui, effectivement, mais la commande fait ce que tu as presque demandé.
Donc si tu veux plus de précision alors j'ai besoin de plus de précisions.
Il faudra donner exactement ta requête et dire ce que tu veux obtenir.
106485010510997108 Répondre à lami20j | Re-
Ta commande (retouchée par bibi) : perl -ne 's/\n/ / if /SELECT/../^FROM/;s/^FROM /\nFROM /;print' substitue les sauts de ligne par des espaces pour les ligne dans l'intervalle donné et par conséquent y compris celui de la ligne qui contient le motif "FROM" et ça donne :
CONNECT TO ORACLE (&CONXORA);
CREATE TABLE ALIAS.TABLECREEE AS
SELECT ID_PERS, ID_GRP_PERS, AGE_PERS NB_ENF, MAX('GRP') AS MAXG
FROM TAB_PERS_GRP_PERS [espace au lieu de saut de ligne] WHERE DATE_DEB <= &DATE_FIN
AND (DATE_FIN IS NULL OR DATE_DEB > &DATE_FIN)
);
DISCONNECT FROM ORACLE;Alors qu'il faudrait : CONNECT TO ORACLE (&CONXORA);
CREATE TABLE ALIAS.TABLECREEE AS
SELECT ID_PERS, ID_GRP_PERS, AGE_PERS NB_ENF, MAX('GRP') AS MAXG
FROM TAB_PERS_GRP_PERS [un saut de ligne ici]
WHERE DATE_DEB <= &DATE_FIN
AND (DATE_FIN IS NULL OR DATE_DEB > &DATE_FIN)
);
DISCONNECT FROM ORACLE;;-))
$ man woman
Il n'y a pas de page de manuel pour woman. Répondre à jipicy | Hello bibi ;-))
Et ça?!
perl -ne 's/\n/ / if /SELECT/../^FROM/;s/^FROM /\nFROM /;s/WHERE/\nWHERE/;print'
Bon, faire tout dans une commande quand les choses se compliquent n'est pas le top.
Pour une solution fiable, peut être que la création d'un script s'impose.
On attends vanhell ou loudvig pour plus de précisions ;-)
106485010510997108 Répondre à lami20j | 29 vanloudhellvig, le 22 mai 2009 à 14:12:24Encore merci à vous deux ça fonctionne sur tous les fichiers avec perl contrairement à awk ou ed, je ne sais toujours pas pourquoi...
Merci lami20j et jipicy d'avoir passer du temps pour m'aider! Répondre à vanloudhellvig | J'ai bien reçu le fichier, mais j'ai beau triturer la commande "ed" dans tous les sens, je n'arriva pas à modifier toutes les occurrences voulues (uniquement la dernière), mais c'est un problème de syntaxe de "ed" ou une limitation ? J'avoue que je ne suis pas encore bien familiarisé avec sa syntaxe bien particulière, qui même si elle est proche de "sed" (ou l'inverse vu que "ed" était là avant), elle plus biscornue ;-((
Le principal c'est qu'on ait (enfin lami20j surtout) trouvé une solution.
Bon week-end.
$ man woman
Il n'y a pas de page de manuel pour woman. Répondre à jipicy | 31 vanhell, le 22 mai 2009 à 15:51:34Oui pareil je ne comprend pas pourquoi ta solution et la mienne avec awk ne fonctionne pas a chaque fois...
Mais oui comme tu le dis le principal c'est que ça fonctionne en perl.
Encore merci à vous deux et bon week end! Répondre à vanhell | Je reviens à la charge avec "sed", ça : sed '
/SELECT/ {
:z
N
/\nFROM/ !b z
s/\n[^\(FROM\)]/ /g
}' perl2.txtça marche toujours pas ?
$ man woman
Il n'y a pas de page de manuel pour woman. Répondre à jipicy |
| 33 vanhell, le 22 mai 2009 à 16:50:06Heu ça fonctionne à part que ça enlève la premiere le premier de caractere des champs SELECT sauf le premier, comme dans ta solution au post 10 Répondre à vanhell |
| Toujours aussi bizarre ;-\
Chez moi avec ton fichier perl2.txt ça marche très bien ;-\
$ man woman
Il n'y a pas de page de manuel pour woman. Répondre à jipicy |
| 35 vanhell, le 22 mai 2009 à 17:11:30Oui j'avais essayé chez moi aussi le code avec sed sur ubuntu ça fonctionnait mais la sur AIX avec ksh ça na fonctionne pas.
Pas grave le principal c'est d'avoir trouver une autre solution. Répondre à vanhell |
|
|
|
|
|
|
|
|
|
|