Probleme avec un script dans unix

Fermé
xeer - 22 juin 2008 à 11:59
 xeer - 24 juin 2008 à 10:50
Bonjour,

voila j'ai un probleme avec un script, bref j'utilise 2 fichier (fichier1 et fichier2)
le fichier2 est ainsi :
[new]

ligne 1
...
ligne n

[modifier]

.....

[supprimer]

......

[.....]

..........

je dois supprimer tout se ki se trouve sous supprimer à partir du fichier 1 c't-à-d ke les lignes ki se trouve sous supprimer dans le fichier 2 se trouve aussi dans la liste du fichier 1(ce fichier ne conntient ke des lignes)

et je dois faire le même chose avec modifier.
A voir également:

5 réponses

j'ai oublié avant tout j'affiche d'abord tout la liste du fichier 1 et après je fais les commandes ci_dessus.

et automatiquement dans le fichier seeresult on voit tout la liste du fichier 1 + les nouveaux lignes sans faire une ligne vide entre les deux listes donc une forme une seul liste.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
22 juin 2008 à 12:28
Salut,

Peux-tu être un peu plus explicite s'il te plaît, en illustrant avec des exemples "avant/après" le contenu de tes fichiers "fichier1 et fichier2".

;-))
-1
en faite le fichier 1 contient une liste de plusieurs ligne(centaines des lignes) comme ceci:
toto.titt nonrecul kkklile
titi.lilo kleos dflls
sqd.sqd sqdq sdqq
.
.
. etc...

le fichier 2 est comme ceci:
[nouveau]
(ligne vide)
klsd.sdn,s ssdfsdnf sdfnsdf
sdfdsf.sdfds df qsdfsdf
sdfqsdfsd.sdfq qsdfs dfsdff
.
.
. etc...
(ligne vide)
[supprimer]
(ligne vide)
dsfgsdf.dfsgdfg dfgsdfgd dfgsdfg
dfgsdfg.sdfg dfsgdfgd dfgfds
dfgsdfg.dfgdfsg sdfgsdf dsfgd
.
.
.etc...
(ligne vide)
[modifier]
(ligne vide)
dqds.sdf qsdfqsd qsdfs
sdfqsd.sqdf sqdfqsdf qsdfqs
sdfqsd.qsdf qsdf qsffds
.
.
.etc ...

mais sache qu'on veut pas modifier ni le fichier 1 et ni le fichier 2 donc j'utilise grace cette commande:
$./script >> see_result

le fichier see_result dois contenir la liste du fichier 1 mais en supprimer les lignes qui se trouve ente [supprimer]...et la ligne vide c'est-à-dire tout se que j'ai mis en gras(voire ci-dessus).

je suis un specialiste dans la conception des sites web et des petits programme mais je reconnais que j'ai des problèmes avec les scripts sous unix.

merci.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
23 juin 2008 à 08:15
En espérant avoir compris ton problème et sans avoir le temps de développer, voila un exemple à adapter :
[tmpfs]$ cat fichier1
fbjdsfbjdsfbs
fjkdsfkjdsf
oiytroiezytr
jfhnklhjfklfjs
dsfgsdf.dfsgdfg dfgsdfgd dfgsdfg
dfgsdfg.sdfg dfsgdfgd dfgfds
dfgsdfg.dfgdfsg sdfgsdf dsfgd
.
.
.etc...
bvx;,nbvx;vjd
iuoipezhre
nkfnujo
kfjj

[tmpfs]$ cat fichier2
[nouveau]

klsd.sdn,s ssdfsdnf sdfnsdf
sdfdsf.sdfds df qsdfsdf
sdfqsdfsd.sdfq qsdfs dfsdff
.
.
. etc...

[supprimer]

dsfgsdf.dfsgdfg dfgsdfgd dfgsdfg
dfgsdfg.sdfg dfsgdfgd dfgfds
dfgsdfg.dfgdfsg sdfgsdf dsfgd
.
.
.etc...

[modifier]

dqds.sdf qsdfqsd qsdfs
sdfqsd.sqdf sqdfqsdf qsdfqs
sdfqsd.qsdf qsdf qsffds
.
.
.etc ...

[tmpfs]$ ligne1=$(sed -n '/^\[supprimer\]/,/^\[modifier\]/{//d;/^$/d;p}' fichier2 | sed -n '1p')
[tmpfs]$ ligne2=$(sed -n '/^\[supprimer\]/,/^\[modifier\]/{//d;/^$/d;p}' fichier2 | sed -n '$p')

[tmpfs]$ echo $ligne1
dsfgsdf.dfsgdfg dfgsdfgd dfgsdfg
[tmpfs]$ echo $ligne2
.etc...

[tmpfs]$ sed -n "/$ligne1/,/$ligne2/p" fichier1
dsfgsdf.dfsgdfg dfgsdfgd dfgsdfg
dfgsdfg.sdfg dfsgdfgd dfgfds
dfgsdfg.dfgdfsg sdfgsdf dsfgd
.
.
.etc...
[tmpfs]
Si j'ai le temps dans la journée (ou ce soir alors), je détaillerai les commandes...
;-))
-1
c'est gentil de ta part de m'avoir repondu rapidement.

j'ai testé mais ça marche pas, en faite j'ai dejà fait sur l'ajout c'est-à-dire que j'ai ajouter tout les lignes qui se trouve entre [nouveau].......et ligne vide grace à cette commande:

#je recupere le numero de la ligne ou se trouve [nouveau]

num=$(sed -n '/nouveau/=' fichier2;

#maitenant j'affiche le resultat

sed -n ''$num','/^:space:*$/'p' fichier2;

et j'utilise cette commande pour afficher le resultat dans un fichier seeresult:
$./script >> seeresult


mais je n'arrive pas avec la suppression et la modification

merci.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
23 juin 2008 à 14:46
Oups désolé j'avais mal compris le problème ce matin ;-((

Essaie comme ça alors :
sed  "/$ligne1/,/$ligne2/d" fichier1 > seeresult 
;-))
-1
non ca marche pas en faite il n'efface pas les lignes qu'il devait supprimer plutôt il affiche tout la liste du fichier 1 dans le fichier seeresult sans modification donc il fait un copie du fichier 1.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
24 juin 2008 à 10:34
Ben écoute chez moi ça marche :
jp@MDK:~/tmpfs ssh$ cat fichier1
fbjdsfbjdsfbs
fjkdsfkjdsf
oiytroiezytr
jfhnklhjfklfjs
dsfgsdf.dfsgdfg dfgsdfgd dfgsdfg
dfgsdfg.sdfg dfsgdfgd dfgfds
dfgsdfg.dfgdfsg sdfgsdf dsfgd
.
.
.etc...
bvx;,nbvx;vjd
iuoipezhre
nkfnujo
kfjj


jp@MDK:~/tmpfs ssh$ cat fichier2
[nouveau]

klsd.sdn,s ssdfsdnf sdfnsdf
sdfdsf.sdfds df qsdfsdf
sdfqsdfsd.sdfq qsdfs dfsdff
.
.
. etc...

[supprimer]

dsfgsdf.dfsgdfg dfgsdfgd dfgsdfg
dfgsdfg.sdfg dfsgdfgd dfgfds
dfgsdfg.dfgdfsg sdfgsdf dsfgd
.
.
.etc...

[modifier]

dqds.sdf qsdfqsd qsdfs
sdfqsd.sqdf sqdfqsdf qsdfqs
sdfqsd.qsdf qsdf qsffds
.
.
.etc ...

jp@MDK:~/tmpfs ssh$ ligne1=$(sed -n '/^\[supprimer\]/,/^\[modifier\]/{//d;/^$/d;p}' fichier2 | sed -n '1p')
jp@MDK:~/tmpfs ssh$ ligne2=$(sed -n '/^\[supprimer\]/,/^\[modifier\]/{//d;/^$/d;p}' fichier2 | sed -n '$p')
jp@MDK:~/tmpfs ssh$ sed  "/$ligne1/,/$ligne2/d" fichier1
fbjdsfbjdsfbs
fjkdsfkjdsf
oiytroiezytr
jfhnklhjfklfjs
bvx;,nbvx;vjd
iuoipezhre
nkfnujo
kfjj


jp@MDK:~/tmpfs ssh$
;-))
-1
ca marche pour toi car les lignes à supprimer se suivent mais dans mon cas les lignes ne se suivent pas.

en faite c'est comme ça pour récupperer les lignes mais ça marche pas encore :

sed -n '/^\[supprimer\]/,/^\[modifier\]/{//d;/^$/d;p}' fichier2 | sed -n '1,$p'

c'est vraiment bizarre certainement il y'a quelque chose qui nous échappent.
0