Supprimer une ligne et la précedente

Résolu
lefreeman63 Messages postés 139 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Bonjour tt le monde,

je cherche comment faire un petit morceau de script soir en perl soit en ksh.

Je cherche à parcourir un fichier vérifier chaque ligne voir si elle contient le champ "north-american-letter-white" et SI elle contient cette ligne je la supprime de mon fichier et je supprime la ligne du dessus.

Quelqu'un aurait une idée de génie, svp??? :-)

Merci d'avance

2 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Avec sed c'est faisable ;-))

    $ cat plop 
    ligne 1
    ligne 2
    ligne 3 elle contient le champ "north-american-letter-white"
    ligne 4
    ligne 5
    ligne 6 elle contient le champ "north-american-letter-white"
    ligne 7
    ligne 8
    
    $ sed -n '$p;N;/north-american-letter-white/{d};P;D;' plop 
    ligne 1
    ligne 4
    ligne 7
    ligne 8
    
    $ 

    ;-))
    1
    1. lefreeman63 Messages postés 139 Statut Membre
       
      Merci bien pour ton aide.

      je me heurte à une erreur:

      sed -n '$p;N;/north-american-letter-white/{d};P;D;' /tmp/diff_printer.dat
      sed: Function $p;N;/north-american-letter-white/{d};P;D; cannot be parsed.
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Quel système ?
      Quelle distrib ?
      Quelle version de "sed" ?
      Quel format de fichier (MS-DOS ou Unix) ?
      0
    3. lefreeman63 Messages postés 139 Statut Membre
       
      Ha oui effectivement désolé pour l'oubli:
      UNIX
      AIX 6.1.0.0

      /usr/bin/sed needs:
      /usr/lib/libc.a(shr.o)
      /unix
      /usr/lib/libcrypt.a(shr.o)
      0
    4. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Essaie de mettre les commandes "sed" dans un fichier de script et d'appeler ensuite ce fichier comme suit :

      $ cat script.sed 
      #n
      $ p                                    
      N                                      
      /north-american-letter-white/ {        
          d                                  
      }                                      
      P                                      
      D
      
      $ sed -f script.sed plop 
      ligne 1
      ligne 4
      ligne 7
      ligne 8
      
      $
      0
    5. lefreeman63 Messages postés 139 Statut Membre
       
      Merci encore de ton aide.
      Même erreur:
      :/tmp # sed -f script.sed diff_printer.dat
      sed: Function $ p                                     cannot be parsed.
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    en ksh "pur"
    ksh ~ $ cat a8
    1
    2
    3
    north-american-letter-white
    4
    5
    6
    north-american-letter-white
    7
    8
    north-american-letter-white
    ksh ~ $ 
    ksh ~ $ t=($(<a8)) ; for((n=0;n<${#t[@]};n++));do case ${t[n+1]} in (*north-american-letter-whit*) ((n=n+1));continue ;; esac ; echo  ${t[n]} ; done
    1
    2
    4
    5
    7
    ksh ~ $ 
    
    1
    1. lefreeman63 Messages postés 139 Statut Membre
       
      Salut merci de ton aide:
      j'obtient cette erreur:
      /usr/bin/ksh: syntax error: '(' unexpected
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      tu as ((n++)) ou ((n=n+1)) ? j'ai changé le code
      0
    3. lefreeman63 Messages postés 139 Statut Membre
       
      J'ai lancé cette commande exactement:

      t=($(<diff_printer.dat)) ; for ((n=0;n<${#t[@]};n++));do case ${t[n+1]} in (*north-american-letter-whit*) ((n=n+1));continue ;; esac ; echo  ${t[n]} ; done
      0
    4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      essaye dans un script avec set -x pour voir ou est l'erreur, on ne doit pas avoir la même version de ksh
      #!/bin/ksh
      set -x
      
      t=($(<a8))
      for((n=0;n<${#t[@]};n++));do
              case ${t[n+1]} in
                      (*north-american-letter-whit*)
                              ((n++));continue ;; 
              esac
              echo  ${t[n]}
      done
      
      0
    5. lefreeman63 Messages postés 139 Statut Membre
       
      Merci encore de ton aide

      :/tmp # ./script.ksh
      ./script.ksh[4]: syntax error at line 4 : '(' unexpected



      :/tmp # cat script.ksh
      #!/bin/ksh
      set -x
      
      t=($(<a8))
      for((n=0;n<${#t[@]};n++));do
              case ${t[n+1]} in
                      (*north-american-letter-whit*)
                              ((n++));continue ;;
              esac
              echo  ${t[n]}
      done
      


      Comment je peux savoir ma version de ksh?
      0