[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  ]