Script Shell : supprimer ligne dans fichier sous unix

JsuisNul Messages postés 137 Statut Membre -  
jee pee Messages postés 9445 Date d'inscription   Statut Modérateur Dernière intervention   -
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. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  2. jee pee Messages postés 9445 Date d'inscription   Statut Modérateur Dernière intervention   9 984
     
    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