J'ai un flux entrant sur un port série, avec de nouvelles lignes apparaissant environ une fois par seconde
wren@Raven:~$ cat /dev/ttyUSB0
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
Je souhaite supprimer les lignes vides et horodater le reste.
sed supprimera les lignes vides et ajoutera un horodatage, mais je ne peux pas faire la mise à jour de l'horodatage, il indique simplement l'heure à laquelle il a été invoqué:
wren@Raven:~$ cat /dev/ttyUSB0 | sed -e '/^$/d' -e "s/$/`date +\,%F\,%T`/"
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
^C
J'ai trouvé ts, une partie de Moreutils, et je peux y accéder pour obtenir un horodatage de mise à jour.
wren@Raven:~$ cat /dev/ttyUSB0 | ts
May 14 09:49:26 A_Sensor1,B_22.00,C_50.00
May 14 09:49:26
May 14 09:49:27 A_Sensor1,B_22.00,C_50.00
^C
Cependant, je ne peux pas combiner correctement ts avec sed.
Cela, qui semble faire ce que je veux, ne produit aucune sortie
wren@Raven:~$ cat /dev/ttyUSB0 | sed -e '/^$/d' | ts
^C
wren@Raven:~$
Cependant, inverser l'ordre des tuyaux produit une sortie, mais bien sûr, ne supprime pas les lignes qui ne sont plus vierges. D'autres substitutions fonctionnent bien, donc je sais que le tuyau à sed fonctionne.
wren@Raven:~$ cat /dev/ttyUSB0 | ts | sed -e '/^$/d'
May 14 10:07:25 A_Sensor1,B_22.00,C_50.00
May 14 10:07:25
May 14 10:07:26 A_Sensor1,B_22.00,C_50.00
May 14 10:07:26
^C
Je suis donc un peu déconcerté. Je peux probablement faire en sorte que sed supprime les lignes indésirables, mais l'horodatage avant la suppression doit être la mauvaise approche.
J'apprécierais une explication et un peu d'aide.
sed -u
. Il s'agit d'un problème de mise en mémoire tampon de bloc par rapport à la mise en mémoire tampon de ligne.