Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/10/2023, à 19:25

zigroful1

awk;sed; ou bash : suppression de lignes sous conditions

Bonjour,
je travaille sous ubuntu 22.04 avec sed awk et bash.
J'ai un fichier csv de la forme:

Dates;item1;item2;item3
01/08/22;a11;a12;a13
01/08/22;a21;a22;a23
01/08/22;a31;a32;a33
02/08/22;a41;a42;a43
03/08/22;a51;a52;a53
04/08/22;a61;a62;a63
05/08/22;a71;a72;a73
05/08/22;a81;a82;a83
05/08/22;a91;a92;a93
31/08/22;a101;a102;a103
05/09/23;a111;a112;a113
07/10/23;a121;a122;a123
12/12/23;a131;a132;a133
31/12/23;a141;a142;a143
31/12/23;a151;a152;a153
31/12/23;a161;a162;a163

je souhaiterai, avec sed awk ou bash, supprimer les lignes de la première occurence de la date 01/08/22 à la dernière occurence de la date 05/08/22.
Avez-vous une idée de la manière de procéder ?
Je ne trouve nulle part, une méthode pour le faire.
Merci d'avance

Hors ligne

#2 Le 02/10/2023, à 19:30

Watael

Re : awk;sed; ou bash : suppression de lignes sous conditions

salut,

utilise un intervalle.

PS: ce n'est pas toi qui travaille SOUS Ubuntu, c'est ton PC. Toi, tu travailles AVEC ou SUR Ubuntu. wink


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 02/10/2023, à 20:10

lynn

Re : awk;sed; ou bash : suppression de lignes sous conditions

Bonjour,

sed '/0[1-5]\/08\/22/d' fichier.csv

«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#4 Le 02/10/2023, à 20:23

Watael

Re : awk;sed; ou bash : suppression de lignes sous conditions

oui, c'est plus léger. smile

sed '\@^0[1-5]/08/22@d' fichier.csv

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 02/10/2023, à 20:28

pingouinux

Re : awk;sed; ou bash : suppression de lignes sous conditions

Bonsoir,
Et si tu as des lignes de formats différents entre la première et la dernière à supprimer :

sed -z 's#01/08/22.*05/08/22[^\n]*\n##' fichier.csv

Hors ligne

#6 Le 05/10/2023, à 09:57

zigroful1

Re : awk;sed; ou bash : suppression de lignes sous conditions

Bonjour,
La remarque de Watael est juste et sa solution fonctionne et je la comprends. La proposition de lynn également.. En revanche celle de pingouinux qui fonctionne me reste incompréhensible. De quels formats différents s'agit-il ? format de date ou de longueurs de lignes ? et comment la formule de pingouinux fonctionne-t-elle ? En tous cas, merci à tous !

Hors ligne

#7 Le 05/10/2023, à 11:48

pingouinux

Re : awk;sed; ou bash : suppression de lignes sous conditions

zigroful1 #6 a écrit :

De quels formats différents s'agit-il ?

sed -z 's#01/08/22.*05/08/22[^\n]*\n##' fichier.csv

Cette commande va supprimer dans le fichier tout le texte compris (limites incluses) entre 01/08/22 et la fin de la ligne contenant 05/08/22, quel que soit le contenu des lignes intermédiaires.

et comment la formule de pingouinux fonctionne-t-elle ?

Avec l'option -z, sed traite la fin de ligne comme un caractère normal, et c'est le caractère nul (\0) qui est pris comme séparateur de lignes.

Hors ligne

#8 Le 13/10/2023, à 21:37

DonutMan75

Re : awk;sed; ou bash : suppression de lignes sous conditions

Watael a écrit :

PS: ce n'est pas toi qui travaille SOUS Ubuntu, c'est ton PC. Toi, tu travailles AVEC ou SUR Ubuntu. wink

Oh tu sais maintenant avec chatGPT, on ne sait plus trop qui parle vraiment tongue

Hors ligne

#9 Le 13/10/2023, à 22:09

Watael

Re : awk;sed; ou bash : suppression de lignes sous conditions

qui me parle ?
lol


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne