Multiplier un fichier de données par une valeur constante?

Bonsoir,

je dispose d’un fichier “u” que je récupère d’un oscilloscope numérique. Ce sont les coordonnées de la trace, en pixel.

# cat u -33,-33,-32,-34,-33,-34,-32,-33,-33,-33,-33,-33,-34,-33,-32,-33,-33,-32,-32,-33,-31,-35,-32,-31,-33,-33,-32, -34,-31,-31,-33,-34,-33,-33,-33,-32,-33,-33,-32,-32,-33,-32,-33,-31,-34,-34,-34,-33,-34,-34,-31,-32,-33,-32, -33,-33,-33,-33,-32,-33,-33,-33,-33,-32,-33,-31,-34,-32,-33,-32,-33,-34, -32,-33,-31,-33,-34,-33,-31,-33,-33,-32,-34,-33,-34,-34,-32,-34,-33,-33,

Je récupère également la valeur du calibre en tension dans le ficher “Cal1”:

# cat Cal1 1.0E-1

Dans un premier temps, je souhaiterais multiplier chaque valeur du fichier “u” par 0,04*Cal1
où 0,04 correspond à 4/100 (100 est l’amplitude maximale de la trace dans le fichier “u” pour 4 divisions) et Cal1 est la valeur contenue dans le fichier du même nom.

Comment puis-je faire en pratique (dans un script shell)???

Merci

Tu veut faire tout ça de manière entièrement automatisée (je parle de la récupération de la valeur dans le fichier Cal1 ) ?
Dans ce cas il va falloir un script shell plus complet :

[code]#!/bin/sh

constante=$(cat Cal1)
constante=$((constante0.04))
awk -F, '{ for ( i = 1 ; i <= NF ; i++ ) { print $i
’$constante’ }}’ u > u.out
[/code]

Je pense doit marcher.

Merci de la réponse, en fait j’ai edité mon premier message pour le préciser en même temps que vous me répondiez…

Par contre je ne comprends pas trop à quoi correspondent les lettres dans la commande ci-dessus… :mrgreen:

Je ne vois pas où je dois faire intervenir mon fichier qui s’appelle u?

[quote=“MisterFreez”]Tu veut faire tout ça de manière entièrement automatisée (je parle de la récupération de la valeur dans le fichier Cal1 ) ?
Dans ce cas il va falloir un script shell plus complet :

[code]#!/bin/sh

constante=$(cat Cal1)
constante=$((constante0.04))
awk -F, '{ for ( i = 1 ; i <= NF ; i++ ) { print $i
’$constante’ }}’ u > u.out
[/code]

Je pense doit marcher.[/quote]

Oui ça marche, merci!

Par contre j’obtiens un fichier avec des nombres à virgule et le séparateur est déjà la virgule…

0,42,-0,42,-0,42,-0,4,-0,44,-0,44,-0,42,-0,44,-0,44,-0,44,-0,44,-0,44,-0,42,-0,44,-0,44,-0,42,-0,44, -0,44,-0,44,-0,44,-0,42,-0,44,-0,42,-0,44,-0,44,-0,44,-0,42,-0,44,-0,42,-0,44,-0,44,-0,44,-0,44,-0,42,-0,42, -0,42,-0,44,-0,44,-0,44,-0,44,-0,48,-0,48,-0,48,-0,48,-0,48,-0,5,-0,48,-0,48,-0,48,-0,48,-0,5,-0,5,-0,5,-0,48, -0,48,-0,48,-0,48,-0,5,-0,48,-0,5,-0,5,-0,48,-0,5,-0,5,-0,48,-0,48,-0,46,-0,48,-0,48,-0,48,-0,48,-0,48,-0,48, -0,48,-0,48,-0,48,-0,5,-0,52,-0,5,-0,5,-0,5,-0,52,-0,52,-0,52,-0,5,-0,5,-0,5,-0

Du coup lorsque je lance le tracé du graphe avec octave, ce n’est pas bon…
Comment dire à awk d’écrire le résultat avec un point plutot que la virgule?

J’ai essayé -F. mais ça ne marche pas…

Le -F permet de définir le caractère séparateur des champs de ton fichier. Si tu veut un point le plus simple c’est de faire ainsi :

[code]#!/bin/sh

constante=$(cat Cal1)
constante=$((constante0.04))
awk -F, '{ for ( i = 1 ; i <= NF ; i++ ) { print gsub(/,/, “.”, $i
’$constante’) }}’ u > u.out[/code]

Ok, j’ai trouvé en modifiant un peu:

CAL=$(cat Cal1) echo $CAL LC_NUMERIC="en_US.UTF-8" awk -F, -v cal=$CAL '{for(n=1;n<NF;n++)printf $n*cal*0.04 FS;print ""}' u > v