[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [linux] script pour transformer un fichier texte
> 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 ]