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 ?
Le 08.02.2006 15:38, *Stephane Chazelas* a écrit fort à propos :
Ce qui va arriver, par contre, c'est que comme perl ou awk voient que leur sortie standard n'est plus un terminal, ils vont bufferiser leur sortie (eviter de tout envoyer au fichier a chaque fois qu'il y a quelque chose a ecrire, mais envoyer par blocs quand il y en a suffisemment). Les lignes auront le bon horodatage, mais le contenu du fichier ne sera pas mis a jour immediatement.
En effet, c'est probablement ce qui rendait vains tous mes efforts depuis un bon moment, parce que je ne reçois au plus qu'une quarantaine d'octets toutes les deux secondes. Je me demandais si je ne me prenais pas les pieds dans le tapis avec tee ou avec « > fichier ». Un phénomène comparable se produit quand j'utilise minicom avec l'option « -C fichier », mais au moins le fichier est à jour dès la fermeture de minicom à n'importe quel instant.
Si ca ne te convient pas, tu peux dire a gawk de "flusher" son buffer apres chaque ecriture:
Ça fonctionne mais le tampon est encore de 4 ko exactement. En revanche, c'est parfait avec :
$ perl -MPOSIX -pe 'BEGIN{$| = 1} s/S+/strftime("%F %T", localtime)/e' < /dev/ttyS0 | tee record
Mais boîte à outils est à présent bien garnie. Merci encore.
Le 08.02.2006 15:38, *Stephane Chazelas* a écrit fort à propos :
Ce qui va arriver, par contre, c'est que comme perl ou awk
voient que leur sortie standard n'est plus un terminal, ils vont
bufferiser leur sortie (eviter de tout envoyer au fichier a
chaque fois qu'il y a quelque chose a ecrire, mais envoyer par
blocs quand il y en a suffisemment). Les lignes auront le bon
horodatage, mais le contenu du fichier ne sera pas mis a jour
immediatement.
En effet, c'est probablement ce qui rendait vains tous mes efforts
depuis un bon moment, parce que je ne reçois au plus qu'une quarantaine
d'octets toutes les deux secondes. Je me demandais si je ne me prenais
pas les pieds dans le tapis avec tee ou avec « > fichier ».
Un phénomène comparable se produit quand j'utilise minicom avec l'option
« -C fichier », mais au moins le fichier est à jour dès la fermeture de
minicom à n'importe quel instant.
Si ca ne te convient pas, tu peux dire a gawk de "flusher" son
buffer apres chaque ecriture:
Le 08.02.2006 15:38, *Stephane Chazelas* a écrit fort à propos :
Ce qui va arriver, par contre, c'est que comme perl ou awk voient que leur sortie standard n'est plus un terminal, ils vont bufferiser leur sortie (eviter de tout envoyer au fichier a chaque fois qu'il y a quelque chose a ecrire, mais envoyer par blocs quand il y en a suffisemment). Les lignes auront le bon horodatage, mais le contenu du fichier ne sera pas mis a jour immediatement.
En effet, c'est probablement ce qui rendait vains tous mes efforts depuis un bon moment, parce que je ne reçois au plus qu'une quarantaine d'octets toutes les deux secondes. Je me demandais si je ne me prenais pas les pieds dans le tapis avec tee ou avec « > fichier ». Un phénomène comparable se produit quand j'utilise minicom avec l'option « -C fichier », mais au moins le fichier est à jour dès la fermeture de minicom à n'importe quel instant.
Si ca ne te convient pas, tu peux dire a gawk de "flusher" son buffer apres chaque ecriture: