OVH Cloud OVH Cloud

substitution en temps reel

21 réponses
Avatar
geo cherchetout
Bonjour,
Je bricole sous GNU/Linux-Mandriva 2006. Je reçois par le port série de
mon pc des résultats de mesures successives en provenance d'un «
scopemètre ». Ces résultats se présentent sous la forme de lignes comme
suit :

$ cat /dev/ttyS0

k0s0Gs0CNOW rms AC+DC 1.125mV, 0Hz, OL

k0s0Gs0CNOW rms AC+DC 1.132mV, 0Hz, OL

k0s0Gs0CNOW rms AC+DC 1.139mV, 0Hz, OL

...

Je souhaiterais que chaque enregistrement comporte, en remplacement de
la chaîne « k0s0Gs0CNOW » la date et l'heure de réception des données.
Je tatonne avec sed mais vainement. Par exemple, j'ai essayé :
$ cat /dev/ttyS0 | sed "s/k0s0Gs0CNOW/`date`/g" ou
$ sed -e 's/k0s0Gs0CNOW/`date`/g' < /dev/ttyS0
mais la date n'apparaît pas dans les mesures affichées.
Un petit coup de pouce, svp ?

10 réponses

1 2 3
Avatar
lhabert
geo cherchetout :

$ cat /dev/ttyS0

k0s0Gs0CNOW rms AC+DC 1.125mV, 0Hz, OL
[snip]

Je souhaiterais que chaque enregistrement comporte, en remplacement de
la chaîne « k0s0Gs0CNOW » la date et l'heure de réception des données.


while read A B; do
printf '%s %sn' "`date`" "$B"
done < /dev/ttyS0

Avatar
Stephane Chazelas
2006-02-04, 15:40(+01), geo cherchetout:
Bonjour,
Je bricole sous GNU/Linux-Mandriva 2006. Je reçois par le port série de
mon pc des résultats de mesures successives en provenance d'un «
scopemètre ». Ces résultats se présentent sous la forme de lignes comme
suit :

$ cat /dev/ttyS0

k0s0Gs0CNOW rms AC+DC 1.125mV, 0Hz, OL

k0s0Gs0CNOW rms AC+DC 1.132mV, 0Hz, OL

k0s0Gs0CNOW rms AC+DC 1.139mV, 0Hz, OL

...

Je souhaiterais que chaque enregistrement comporte, en remplacement de
la chaîne « k0s0Gs0CNOW » la date et l'heure de réception des données.
Je tatonne avec sed mais vainement. Par exemple, j'ai essayé :
$ cat /dev/ttyS0 | sed "s/k0s0Gs0CNOW/`date`/g" ou
$ sed -e 's/k0s0Gs0CNOW/`date`/g' < /dev/ttyS0
mais la date n'apparaît pas dans les mesures affichées.
Un petit coup de pouce, svp ?


gawk '{sub(/k0s0Gs0CNOW/, strftime("%F %T")); print}' /dev/ttyS0

--
Stéphane

Avatar
geo cherchetout
Le 04.02.2006 15:49, *Luc Habert* a écrit fort à propos :

while read A B; do
printf '%s %sn' "`date`" "$B"
done < /dev/ttyS0


$ while read A B; do
printf '%s %sn' "`date`" "$B"
done < /dev/ttyS0

sam fév 4 16:03:46 CET 2006 rms AC+DC 1.000mV, 0Hz, OL
sam fév 4 16:03:46 CET 2006
sam fév 4 16:03:52 CET 2006 rms AC+DC 1.000mV, 0Hz, OL
sam fév 4 16:03:52 CET 2006
sam fév 4 16:04:08 CET 2006 rms AC+DC 1.000mV, 0Hz, OL
sam fév 4 16:04:08 CET 2006

Merci, c'est presque parfait, le seul défaut étant la répétition des lignes.

Avatar
lhabert
Ah, oui, tu as des lignes vides. Bon, bein :

while read A B; do
test -n "$B" && printf '%s %sn' "`date`" "$B"
done < /dev/ttyS0

, alors.
Avatar
geo cherchetout
Le 04.02.2006 16:11, *Luc Habert* a écrit fort à propos :

Ah, oui, tu as des lignes vides.


Ce n'est pas tout à fait ça, j'ai seulement une deuxième ligne en trop
pour chaque mesure, ne contenant que la date. (Sans gravité, je
trouverai bien le moyen de la supprimer ultérieurement.)

Bon, bein :

while read A B; do
test -n "$B" && printf '%s %sn' "`date`" "$B"
done < /dev/ttyS0

, alors.


Ça ne marche plus.

$ while read A B; do test -n "$B" && printf '%s %sn' "`date`" "$B" done
< /dev/ttyS0



les données ne s'affichent plus.

Avatar
geo cherchetout
Le 04.02.2006 16:34, *geo cherchetout* a écrit fort à propos :

Ça ne marche plus.

$ while read A B; do test -n "$B" && printf '%s %sn' "`date`" "$B" done
< /dev/ttyS0



les données ne s'affichent plus.


Pardon, j'ai une panne du côté de mon interface optique bricolée. Les
essais sont suspendus.


Avatar
lhabert
geo cherchetout :

Ah, oui, tu as des lignes vides.


Ce n'est pas tout à fait ça, j'ai seulement une deuxième ligne en trop
pour chaque mesure


Je voulais dire des lignes vides dans l'entrée.

Ça ne marche plus.

$ while read A B; do test -n "$B" && printf '%s %sn' "`date`" "$B" done
< /dev/ttyS0



les données ne s'affichent plus.


Si c'est exactement ce que tu as tapé, c'est normal : il faut un « ; » avant
le « done » si tu mets tout sur une même ligne. Chez moi, ce que je t'ai
donné marche (enfin, sans le < /dev/ttyS0, en envoyant à la place les lignes
d'exemple que tu as données).


Avatar
geo cherchetout
Le 04.02.2006 16:42, *Luc Habert* a écrit fort à propos :

Si c'est exactement ce que tu as tapé, c'est normal : il faut un « ; » avant
le « done » si tu mets tout sur une même ligne. Chez moi, ce que je t'ai
donné marche (enfin, sans le < /dev/ttyS0, en envoyant à la place les lignes
d'exemple que tu as données).


Suis-je bête! Avec le point-virgule c'est parfait. :-)
Merci mille fois.
(Mon interface est de nouveau opérationnelle.)

Avatar
geo cherchetout
Le 04.02.2006 16:08, *Stephane Chazelas* a écrit fort à propos :

gawk '{sub(/k0s0Gs0CNOW/, strftime("%F %T")); print}' /dev/ttyS0


$ gawk '{sub(/k0s0Gs0CNOW/, strftime("%F %T")); print}' /dev/ttyS0
k0s0Gs0CNOW rms AC+DC 1.000mV, 0Hz, OL

k0s0Gs0CNOW rms AC+DC 1.000mV, 0Hz, OL

k0s0Gs0CNOW rms AC+DC 1.000mV, 0Hz, OL

...

Aucune substitution n'est faite.

$ rpm -qi gawk
Name : gawk Relocations: (not relocatable)
Version : 3.1.4 Vendor: Mandrakesoft
Release : 1mdk Build Date: lun 10 jan 2005
07:33:47 CET

Avatar
Stephane Chazelas
2006-02-04, 16:53(+01), geo cherchetout:
Le 04.02.2006 16:08, *Stephane Chazelas* a écrit fort à propos :

gawk '{sub(/k0s0Gs0CNOW/, strftime("%F %T")); print}' /dev/ttyS0


$ gawk '{sub(/k0s0Gs0CNOW/, strftime("%F %T")); print}' /dev/ttyS0
k0s0Gs0CNOW rms AC+DC 1.000mV, 0Hz, OL

k0s0Gs0CNOW rms AC+DC 1.000mV, 0Hz, OL

k0s0Gs0CNOW rms AC+DC 1.000mV, 0Hz, OL

...

Aucune substitution n'est faite.
[...]


etrange. Et ca donne quoi quand tu fais

od -c /dev/ttyS0

?


--
Stéphane


1 2 3