Script Shell : supprimer ligne dans fichier sous unix

Fermé
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 - 21 déc. 2021 à 17:32
jee pee Messages postés 39815 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 31 mai 2024 - 23 déc. 2021 à 01:15
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.
A voir également:

3 réponses

jee pee Messages postés 39815 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 31 mai 2024 9 212
Modifié le 21 déc. 2021 à 19:41
Bonjour,

Je ne pratique pas tous les jours linux, mais si on regarde : https://forums.commentcamarche.net/forum/affich-37622058-sed-supprimer-une-ou-plusieurs-lignes-d-un-fichier
quelque chose comme :
sed '/;;;;;;;$/d' mon_fichier.txt 

mais si A et/ou B vide aussi, cela ne fonctionne pas

0
dubcek Messages postés 18728 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 29 mai 2024 5 615
Modifié le 22 déc. 2021 à 11:12
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
jee pee Messages postés 39815 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 31 mai 2024 9 212
Modifié le 23 déc. 2021 à 12:42
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