[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [linux] script pour transformer un fichier texte



Je crois que un "Merci Pascal" était plus aproprié que "ca va pas"...enfin:
	commande >outputfile pouc changer le stdout vers outputfile. 
Je crois que ton problème, c'est un manque de connaissance du scripting
shell et des tools tels sed,awk,...man is your friend, Linuxdoc.org aussi. 

1°: Lire http://www.linuxdoc.org/HOWTO/Bash-Prog-Intro-HOWTO-1.html
2° Lire http://www.linuxdoc.org/HOWTO/Adv-Bash-Scr-HOWTO/awk.html

---
Vincent Jamart, Sgt.
AIX System Administrator
22 Log. Wing -XSU
BELGIAN AIR FORCE
tf: +32-2/701.23.02
fax: +32-2/701.59.32
mail: JamartV@baf.mil.be
------------------------------------
'Jesus saves, but only Buddha makes incremental backups.'


> -----Original Message-----
> From:	Gaetan [SMTP:gaetan.guyodo@lrb.ap-hop-paris.fr]
> Sent:	14 May 01 14:48
> To:	linux@lists.linuxbe.org
> Subject:	Re: [linux] script pour transformer un fichier texte
> 
> bon, ça marche pas, tout ça...
> et j'ai oublié, mais j'aimerais aussi remplacer les séparateurs (|) par
> des
> séparateurs "virgule-espace"
> j'ai awk mais j'aimerais que ça me sorte les résultats dans un fichier,
> plutôt
> que dans le terminal...
> 
> et pour perl, ça me donne ces erreurs :
> 
> ./scriptperl: @champs=(0,1,2,10,11,12,13): command not found
> ./scriptperl: line 4: syntax error near unexpected token `(<>)'
> ./scriptperl: line 4: `while (<>) {'
> 
> vu que je ne comprends pas très bien le script, je quémande encore un peu
> d'aide...
> 
> Le lun, 14 mai 2001, vous avez écrit :
> > > 1- je voudrais rajouter du texte devant chaque ligne (le même texte
> devant
> > > chacune des 36000 lignes). comment faire ça avec une commande bash, ou
> bien un
> > > petit programme, je ne sais pas... un truc simple ?
> > 
> > sed 's/^/blablabla/' < fichier > nouveau_fichier
> > évidemment: remplace "blablabla" ;)
> > Pour explication: ^ symbolise le début de la ligne.
> > Cette ligne te permet donc d'insérer un texte quelconque au début de
> > chaque ligne.
> > 
> > Note qu'une alternative (mais probablement plus lente) serait:
> > cat fichier | while read ligne; do
> >   echo "blablabla"$ligne
> > done > nouveau_fichier
> > 
> > > 2- ce fichier texte est une extraction de PostgreSQL avec un
> délimiteur "|".
> > > Mais pour le rentrer dans une autre base, j'ai besoin de mettre entre
> > > apostrophes les champs caractères (et seulement ceux là).
> > > qqn voit-il une façon simple de faire ça ?
> > > voici une ligne pour exemple :
> > > 
> > > 55001|ABAINVILLE
> |06|0.3|1367|8331|23971|8347|23974|305|5510|552|41|55130
> > > 
> > > et voici ce qu'il faut que j'en fasse (les 3 premiers champs et les 4
> derniers
> > > sont au format varchar et en plus, le second champ contient des
> espaces) :
> > > 
> > > '55001'|'ABAINVILLE
> '|'06'|0.3|1367|8331|23971|8347|23974|305|'5510'|'552'|'41'|'55130'
> > > 
> > > si qqn est spécialiste de ce genre de bidouilles, je veux bien un
> p'tit coup de
> > > main. et puis ça m'intéresse de savoir comment je peux faire ça
> simplement.
> > 
> > Il me semble que awk est tout indiqué:
> > 
> > crée un fichier monscript, p.ex. dans /usr/local/bin:
> > 
> > #!/usr/bin/awk -f
> > BEGIN {
> >   FS="|"
> > }
> > {
> >   printf("'%s'|'%s'|'%s'|%s|%s|%s|%s|%s|%s|%s|'%s'|'%s'|'%s'|'%s'\n",
> > 	$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14);
> > }
> > 
> > 
> > Mais finalement c'est peut-être mieux avec perl:
> > 
> > #!/usr/bin/perl
> > 
> > @champs=(0,1,2,10,11,12,13);
> > 
> > while (<>) {
> >   chomp();
> >   @f = split('|');
> >   foreach $i (@champs) {
> >     $f[$i] = "'".$f[$i]."'";
> >   }
> >   $l = join('|', @f);
> >   print $l."\n";
> > }
> > 
> > -> tu sauves ca dans un fichier, p.ex.
> > ~/bin/pgsql2mysql
> > 
> > -> tu rends ce fichier éxécutable:
> > chmod +x ~/bin/pgsql2mysql
> > 
> > Ensuite:
> > ~/bin/pgsql2mysql < ancien_fichier > nouveau_fichier
> > 
> > Evidemment, tes deux souhaits se laissent combiner: pour (en
> > plus) afficher une chaîne au début de chaque ligne, suffit de
> > remplacer
> >   print $l."\n";
> > par
> >   print "bla bla bla".$l."\n";
> > 
> > --
> >   -o) / Pascal Bleser          ATOS Payment Systems|
> >   /\\ \ C++/UNIX Development        Aachen, Germany|
> >  _\_v  \<guru@linuxbe.org> <pbleser@atos-group.com>|
> > ---------------------------------------------------|
> > /earth is 98% full... please delete anyone you can.:
> > ---------------------------------------------------'
> > 
> > [ Soyez précis dans vos sujets svp afin de déterminer directement  ]
> > [ le type de demande...                                            ]
> > [ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php     ]
> > [ http://LinuxBe.org              Contact: listmaster@linuxbe.org  ]
> 
> 
> [ Soyez précis dans vos sujets svp afin de déterminer directement  ]
> [ le type de demande...                                            ]
> [ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php     ]
> [ http://LinuxBe.org              Contact: listmaster@linuxbe.org  ]

[ Soyez précis dans vos sujets svp afin de déterminer directement  ]
[ le type de demande...                                            ]
[ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php     ]
[ http://LinuxBe.org              Contact: listmaster@linuxbe.org  ]