Probleme avec un script dans unix

xeer -  
 xeer -
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.
Configuration: Windows XP
Internet Explorer 6.0

5 réponses

  1. xeer
     
    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
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    1. xeer
       
      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
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    1. xeer
       
      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
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Oups désolé j'avais mal compris le problème ce matin ;-((

    Essaie comme ça alors :
    sed  "/$ligne1/,/$ligne2/d" fichier1 > seeresult 
    ;-))
    -1
    1. xeer
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    1. xeer
       
      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