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

**URL:** <https://www.debian-fr.org/t/multiplier-un-fichier-de-donnees-par-une-valeur-constante/25585>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 9:44 UTC](https://www.debian-fr.org/t/multiplier-un-fichier-de-donnees-par-une-valeur-constante/25585 "2016-02-20T21:44:52Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![totola](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/3be4f8/32.png) [@totola](https://www.debian-fr.org/u/totola)\
**Post date:** [Février 20, 2016, 9:44 UTC](https://www.debian-fr.org/t/multiplier-un-fichier-de-donnees-par-une-valeur-constante/25585/1 "2016-02-20T21:44:52Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 9:44 UTC](https://www.debian-fr.org/t/multiplier-un-fichier-de-donnees-par-une-valeur-constante/25585/2 "2016-02-20T21:44:53Z")

</div>

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=$((constante_0.04))  
awk -F, '{ for ( i = 1 ; i \<= NF ; i++ ) { print $i_’$constante’ }}’ u \> u.out  
[/code]

Je pense doit marcher.

---

<div class="post-metadata">

**Author:** ![totola](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/3be4f8/32.png) [@totola](https://www.debian-fr.org/u/totola)\
**Post date:** [Février 20, 2016, 9:44 UTC](https://www.debian-fr.org/t/multiplier-un-fichier-de-donnees-par-une-valeur-constante/25585/3 "2016-02-20T21:44:54Z")

</div>

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:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")

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

---

<div class="post-metadata">

**Author:** ![totola](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/3be4f8/32.png) [@totola](https://www.debian-fr.org/u/totola)\
**Post date:** [Février 20, 2016, 9:45 UTC](https://www.debian-fr.org/t/multiplier-un-fichier-de-donnees-par-une-valeur-constante/25585/4 "2016-02-20T21:45:01Z")

</div>

[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=$((constante_0.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…

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 9:45 UTC](https://www.debian-fr.org/t/multiplier-un-fichier-de-donnees-par-une-valeur-constante/25585/5 "2016-02-20T21:45:02Z")

</div>

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=$((constante_0.04))  
awk -F, '{ for ( i = 1 ; i \<= NF ; i++ ) { print gsub(/,/, “.”, $i_’$constante’) }}’ u \> u.out[/code]

---

<div class="post-metadata">

**Author:** ![totola](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/3be4f8/32.png) [@totola](https://www.debian-fr.org/u/totola)\
**Post date:** [Février 20, 2016, 9:45 UTC](https://www.debian-fr.org/t/multiplier-un-fichier-de-donnees-par-une-valeur-constante/25585/6 "2016-02-20T21:45:11Z")

</div>

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`
