Script Shell : supprimer ligne dans fichier sous unix

Bonjour,

J'ai un fichier comme ci-desdsous :

champ1;champ2;champ3;champ4;champ5;champ6;champ7;champ8
A;B;C;D;E;F;G;H
A;B;;;E;F;G;H
A;B;;;;;;;
A;B;C;D;E;;;;

Je souhaite supprimer toute les lignes ou seul les champ1 et champ2 sont renseigné et le reste vide.
( ligne à supprimer A;B;;;;;;; )

J'ai essayer de voir avec un sed mais je ne vois pas comment faire pour mon cas.

Merci pour votre aide.

3 réponses

  1. Contributeur
    hello
    $ awk -F ";" '{for(n=1; n<=NF; n++)if(length($n))x++; if(x>2)print $0; x=0}' fichier
    champ1;champ2;champ3;champ4;champ5;champ6;champ7;champ8
    A;B;C;D;E;F;G;H
    A;B;;;E;F;G;H
    A;B;C;D;E;;;;

    possible défaut, élimine aussi
    A;;C;;;;;;

    autre methode
    $ awk -F ";" '$1 && $2 && ($3 || $4 || $5 || $6 || $7 || $8)' fichier
    champ1;champ2;champ3;champ4;champ5;champ6;champ7;champ8
    A;B;C;D;E;F;G;H
    A;B;;;E;F;G;H
    A;B;C;D;E;;;;
    0
    1. Modérateur
      J'ai lancé une VM linux ;-)

      Avec sed et regex :
      sed -E '/^[[:alnum:]]+;[[:alnum:]]+;;;;;;;$/d' fic.txt


      linuxlite  ~ cat fic.txt 
      A;B;C;D;E;F;G;H
      A;B;;;E;F;G;H
      A;B;;;;;;;
      A;B;C;D;E;;;; 
      A;B;C;D;E;F;G;H
      A;B;;;E;F;G;H
      A;B;C;D;E;;;; 
      AAABBB;ZZZCCC;;;;;;;
      
      linuxlite  ~  sed -E '/^[[:alnum:]]+;[[:alnum:]]+;;;;;;;$/d' fic.txt
      A;B;C;D;E;F;G;H
      A;B;;;E;F;G;H
      A;B;C;D;E;;;; 
      A;B;C;D;E;F;G;H
      A;B;;;E;F;G;H
      A;B;C;D;E;;;; 


      alnum
      teste les caractères alphanumériques, si les 2 premiers champs peuvent contenir autre chose, on peut utiliser :
      sed -E '/^.+;.+;;;;;;;$/d' fic.txt
       
      0