|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : octobre 2006 Messages : 133 ![]() |
Bonjour, je travaille avec cygwin, et je suis un debutant de chez debutant pour les expression reguliere.. voila, j'ai un fichier csv classique, et je voudrais supprimer la colonne 2 et 5 avec sed..je m'approche de la solution avec sed:
mais ce code ne supprime dans ce cas que tout ce qu'il y a avant la troisieme virgule.. si quelqu'un pouvais m'aider ce serait super sympa. Merci
__________________
Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff... |
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 946 ![]() |
Cut est plus adapté pour ce genre de travail.
ou Dans ton code sed, la parenthèse indique : "tout, jusqu'à la première virgule". Et la répétition supprime donc tout, jusqu'à la 3e virgule. Je ne comprends pas trop ce que tu as voulu faire. Bon, et comme tu demandais la solution en sed, voici plusieurs façons possibles : Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : octobre 2006 Messages : 133 ![]() |
Merci beaucoup, mais je precise que j'avais deja la solution en utilisant cut. mais cette solution est absolument inadaptee dans la mesure ou je dois effectuer ce traitement sur plusieurs fichiers dont certains font plusieurs go.
Le temps de traitement est beaucoup, beaucoup trop long..( plusieurs jours sur certains fichiers) voila. Merci beaucoup pour l'expression reguliere. a+
__________________
Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff... |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : juillet 2004 Messages : 2 246 ![]() |
Pour des traitements lourds, il vaut mieux utiliser perl qui est plus véloce.
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer. |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : octobre 2006 Messages : 133 ![]() |
si je pouvais oui, mais j'ai rien d'autre que cygwin, et a mon grand regret, je suis pas un pro du script unix, et encore moins des expressions regulieres..
Mais je demande qu'a apprendre..
__________________
Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff... |
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 946 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : octobre 2006 Messages : 133 ![]() |
oui, je remarque une difference tres significative entre cut et sed. mais mon probleme est en fait beaucoup plus complique que tel que je l'ai exposer.
en fait, j'ai un repertoire qui contient plusieurs fichiers csv. De ces fichiers, je dois extraire certaine colonne (par exemple la col1, col4, col5) les nombre de colonnes de chaque fichier est variable. ces information se trouve dans un fichier de configuration qui se presente de la facon suivante: report1.csv [1,4,5] report2.csv [2,4,5,8] report3.csv [4,7] etc.. cela signifie que par exemple pour le fichier report1.csv je dois produire un nouveau fichier ou j'aurais extrais les colonnes 1, 4 et 5. pour le report2, les colonnes 2, 4, 5, et 8. Ces fichier peuvent tous avoir un nombre de colonne different( par exemple report1.csv peut comporter 23 colonnes, et report2 en contenir 10. donc je souhaite produire une expression reguliere parametree qui soit applicable a tout les cas. Je galere, mais d'une force.. j'ai deja fait le script qui extrai l'indice de la colonne pour chaque rapport. quelqu'un aurait une expression reguliere a me propose
__________________
Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff... |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 946 ![]() |
Avec sed, utilise la première expression rationnelle que j'ai donnée, c'est la plus simple à paramétrée, sauf si tu as plus de 10 colonnes (certains sed ne le gèrent pas).
Avec cut, ça aurait été assez simple à générer. Je suis surpris que ce soit si lent. Je ferai des tests. Le plus simple est d'écrire un script sed qui génère la commande sed à exécuter. |
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : octobre 2006 Messages : 133 ![]() |
c'est tres tres lent avec cut, car je donis prendre chaque fichier ligne par ligne et avec un cut parametree, cle prens 0.5 seconde par ligne en gros ( le cut est dans une boucle) c'est absolument impossible dans mon cas.. peut etre aussi que je m'y suis mal pris avec mon script.. je sais pas..
En tout cas merci pour vos posts..
__________________
Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff... |
|
|
00
|
|
|
#10 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 946 ![]() |
Cut peut lire tout le fichier, tout seul (comme sed et perl). Donc, ne le mets pas dans une boucle... Si c'est le shell qui fait une boucle en appelant read et cut sur chaque ligne, c'est évident que ce soit très lent : à chaque ligne, il doit créer un processus (cut) !
Petit benchmark : Code :
|
||
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() Inscription : octobre 2006 Messages : 133 ![]() |
oui, c'est ce que je viens de voir en relisant vos posts, simplement, je ne savais pas que cut -d pouvais prendre plusieur arguments pour plusieurs occurences du delimiteur et s'ecrire de cette facon . De toute maniere, j'ai mal concu mon script, car j'ai mal apprecier le probleme qui m'etait pose.
Mille fois merci. j'ai resolu mon probleme une fois de plus grace a ce merveilleux forum, et les merveilleuse personnes qui y participe
__________________
Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com