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

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  ]