Insérer point virgule dans un fichier - Shell/Batch - Programmation
Marsh Posté le 07-07-2009 à 10:31:55
avec un sed :
Code :
|
Marsh Posté le 07-07-2009 à 10:43:39
Parfait !
Merci beaucoup !
Par contre si j'ai une champ de 60 caractères, je dois mettre 60 points ?!
(............................................................\)
c'est moche le sed quand même...
Bruno.
Marsh Posté le 07-07-2009 à 10:58:03
tu dois pouvoir utiliser .{60} au lieu de 60 points je pense... (syntaxe regexp classique)
sinon tu peux passer par un awk, et faire des substr(), en fonction de la structure de ta ligne l'un ou l'autre peut être plus lisible:
Code :
|
j'ai pas mis la totale, mais c'est l'idée...
Marsh Posté le 07-07-2009 à 11:10:55
OK.
Et ca sert à quoi la série de chiffre après : \1;\2;\3;\4;\5;\6;\7/
Car là j'ai 59 colonne donc j'ai fais :
........\)/\1;\2;\3;\4;\5;\6;\7;\8;\9;\10;\11;\12;\13;\14;\15;\16;\17;\18;\19;\20;\21;\22;\23;\24;\25;\26;\27;\28;\29;\30;\31;\32;\33;\34;\35;\36;\37;\38;\39;\40;\41;\42;\43;\44;\45;\46;\47;\48;\49;\50;\51;\52;\53;\54;\55;\56;\57;\58;\59/"
mais ca me découpe pas mon fichier comme je veux, ca me duplique des colonne j'ai l'impression..
Marsh Posté le 07-07-2009 à 11:17:27
les \1 \2 etc servent à rappeler le résultat de ce qui a été variabilisé grace à \(....\) dans la première partie du sed...
c pour servir plusieurs fois ce script? parce que sinon, si c du one-shot sur un gros fichier, tu peux utiliser excel. tu mets tout dans une colonne, données> convertir> taille fixe> valider, puis un export en csv et roule raoul.
Marsh Posté le 07-07-2009 à 11:23:10
ReplyMarsh Posté le 07-07-2009 à 11:25:55
j'ai compris mon souci, les variables à 2 chiffres me posent problème, exemple avec \15;
ca me ressort la variable \1 + le chiffre 5
au lieu de ressortir la variable \15
une idée !?
Marsh Posté le 07-07-2009 à 11:28:37
prog_bl a écrit : impossible, mon fichier fait plusieurs 100 aine de milliers de ligne... |
arf. effectivement excel va être limité.
prog_bl a écrit : j'ai compris mon souci, les variables à 2 chiffres me posent problème, exemple avec \15; |
je me demande si cette syntaxe n'est pas limitée a 9 variables... si oui, je dirais que tu est obligé de le faire n plusieurs fois, mais ca va devenir limite chiant... du coup, je te conseillerais limite le awk qui restera peut être plus lisible et maintenable.
Marsh Posté le 07-07-2009 à 11:48:31
ReplyMarsh Posté le 07-07-2009 à 14:54:26
Parfait ! Ca marche !
J'ai du faire 8 sed en fait, car la variable 1 sert pour la ligne précédente, donc on ne récupère que 8 variables à chaque fois : 8*7=56 et 8*8=64, et comme j'ai 59 colonnes = 8 sed !
Le compte est bon, on peut passer aux lettres !
Merci à tous !
Marsh Posté le 11-07-2009 à 19:19:51
prog_bl a écrit : Parfait ! Ca marche ! |
T'aurais pu le faire en une fois avec un bon script Python (ou perl)
Code :
|
Marsh Posté le 07-07-2009 à 10:12:06
Bonjour,
Un petit coup de main ne serait pas de refus, je cherche à insérer dans un fichier plat des points virgules pour délimiter mes champs (pour pouvoir le traiter plus facilement en awk par la suite).
Mon fichier contient par exemple ces données :
200902050000V9TEST0001
200902060000T1POUR0002
200902070000V2VEHL0001
et je voudrais avoir le résultat suivant :
2009;02;05;0000;V9;TEST;0001
2009;02;06;0000;T1;POUR;0002
2009;02;07;0000;V2;VEHL;0001
Je connais le numéro de colonne où je dois insérer mes point-virgule mais je ne vois pas comment mettre en place mon script shell... peut être avec un sed, mais manque d'habitude.
Merci pour votre aide.
Bruno.