#1 Le 14/06/2017, à 09:49
- BenjiBoy
[RESOLU] Flux de données dans un terminal
Bonjour,
je fais suite à ma problématique de "récolte" d'information sur un périphérique distant.
Lorsque je fais un ssh (ou un telnet mais le ssh est plus sûr) sur un périphérique distant :
ssh -v mon_url.machin.fr -p 1000
Là je récupère les trames qui se bousculent, en effet le périphérique envoie une série de paramètre (environ 15 lignes) à intervalle de 1 seconde.
Comment puis-je mettre en place un awk (par exemple, peut-être pas la meilleurs solution) pour que je puisse récupérer les valeurs de chaque paramètre et les placer indépendamment dans des fichiers ?
Exemple de trame :
Checksum
PID 0xA043
FW 123
SER# HQ1533B2M5J
V 12660
I -190
VPV 0
PPV 0
CS 0
ERR 0
LOAD ON
IL 200
H19 0
H20 0
H21 221
H22 0
H23 0
HSDS 0
et toute les secondes la trame suivante s'ajoute à celle-ci dans le terminal, seul un ctrl+c stop le défilement.
So what ?
a+
Dernière modification par BenjiBoy (Le 29/08/2017, à 08:07)
Hors ligne
#2 Le 14/06/2017, à 11:11
- BenjiBoy
Re : [RESOLU] Flux de données dans un terminal
Je précise un peu ma demande, et à mon avis ça corse le problème.
Donc par rapport à la trame brut, ci dessus, dans l'idéal j'aimerais en retirer un fichier texte qui serait comme suit :
V,I,LOAD,IL,H21
12660,-190,ON,200,221
12660,-190,ON,200,221
12660,-190,ON,200,221
12660,-190,ON,200,221
12660,-190,ON,200,221
12660,-190,ON,200,221
12660,-190,ON,200,221
Je ne prends que certain paramètre, place leslabel sur une ligne, et chaque ligne serait un relevé des valeurs, chaque seconde.
Je n'ai toujours pas réussis à récupérer du texte car le flux sortant du ssh est ininterrompu.
Auriez-vous une idée ?
Bonne journée
Hors ligne
#3 Le 14/06/2017, à 14:34
- BenjiBoy
Re : [RESOLU] Flux de données dans un terminal
Je galère vraiment à trouver une solution....
Pas moyen de faire quelque chose de ce flux entrant permanent. Ou alors je m'y prends mal...
Un pti coup de main ?
Hors ligne
#4 Le 15/06/2017, à 12:41
- credenhill
Re : [RESOLU] Flux de données dans un terminal
hello
essayer
ssh -v mon_url.machin.fr -p 1000 | awk 'BEGIN {print "V,I,LOAD,IL,H21"} /^V|^I|^LOAD|^IL/ {printf $2 ","} /^H21/ {print $2}'
Hors ligne
#5 Le 19/06/2017, à 12:41
- BenjiBoy
Re : [RESOLU] Flux de données dans un terminal
Salut,
merci pour cette information.
Actuellement je me suis fais rattrapé par un (gros) travail à faire donc je ne peux pas tester, mais ne manquerai pas de m'y remettre et de faire un retour une fois effectué.
A bientôt
Hors ligne
#6 Le 21/06/2017, à 09:06
- BenjiBoy
Re : [RESOLU] Flux de données dans un terminal
Hello,
donc j'ai essayé la commande, alors le problème c'est que le ssh me sort pas exactement la même trame, c'est plus brouillon exemple :
debug1: ssh_exchange_identification: PID 0xA043
debug1: ssh_exchange_identification: FW 123
debug1: ssh_exchange_identification: SER# HQ1533M2YXJ
debug1: ssh_exchange_identification: V 12400
debug1: ssh_exchange_identification: I -540
debug1: ssh_exchange_identification: VPV 16450
debug1: ssh_exchange_identification: PPV 0
debug1: ssh_exchange_identification: CS 0
debug1: ssh_exchange_identification: ERR 0
debug1: ssh_exchange_identification: LOAD ON
debug1: ssh_exchange_identification: IL 500
debug1: ssh_exchange_identification: H19 0
debug1: ssh_exchange_identification: H20 0
debug1: ssh_exchange_identification: H21 9
debug1: ssh_exchange_identification: H22 0
debug1: ssh_exchange_identification: H23 9
debug1: ssh_exchange_identification: HSDS 7
Mais même en remplaçant la requête ssh par une requête telnet, ça ne fonctionne pas : ça affiche bien "V,I,LOAD,IL,H21" mais plus rien ensuite.
A propos, comment est-ce qu'on stoppe une requête telnet qui ne s'interrompt pas d'elle même ? Un ctrl + C arrête l'affichage de nouvelles trames mais je ne récupère pas la main.
Bonne journée.
Hors ligne
#7 Le 21/06/2017, à 12:26
- credenhill
Re : [RESOLU] Flux de données dans un terminal
essayer
ssh -v mon_url.machin.fr -p 1000 | awk 'BEGIN {print "V,I,LOAD,IL,H21"} $3 ~ /^V|^I|^LOAD|^IL/ {printf $2 ","} $3 ~ /^H21/ {print $2}'
Hors ligne
#8 Le 21/06/2017, à 12:46
- BenjiBoy
Re : [RESOLU] Flux de données dans un terminal
Salut credenhill,
pareil, le flux déferle mais ça ne print pas spécialement un truc (à part la même bouillie citée plus haut). Le fait est que le stdout est saturé du coup je ne sais pas si ça passer à la commande après le pipe ?
En calant des "echo" on voit que ça ne passe pas.
Hors ligne
#9 Le 21/06/2017, à 13:39
- credenhill
Re : [RESOLU] Flux de données dans un terminal
récupérer 200 lignes pour voir
ssh -v mon_url.machin.fr -p 1000 | head -200 > log
Hors ligne
#10 Le 21/06/2017, à 15:09
- BenjiBoy
Re : [RESOLU] Flux de données dans un terminal
fichier vide.
Hors ligne
#11 Le 22/06/2017, à 12:27
- credenhill
Re : [RESOLU] Flux de données dans un terminal
ssh -v mon_url.machin.fr -p 1000
affiche quelque chose ?
Hors ligne
#12 Le 26/06/2017, à 09:23
- BenjiBoy
Re : [RESOLU] Flux de données dans un terminal
Hello, voilà un exemple :
ssh -v [url] -p 1000
OpenSSH_7.3p1 Ubuntu-1ubuntu0.1, OpenSSL 1.0.2g 1 Mar 2016
debug1: Reading configuration data /etc/ssh/ssh_config
[...]
debug1: Local version string SSH-2.0-OpenSSH_7.3p1 Ubuntu-1ubuntu0.1
debug1: ssh_exchange_identification:
debug1: ssh_exchange_identification: ser2net port 1000 device /dev/serial1 [19200 N81] (NB1600_ROXANE 3.18.16)
debug1: ssh_exchange_identification:
debug1: ssh_exchange_identification:
debug1: ssh_exchange_identification: :4AAAAFD
debug1: ssh_exchange_identification: :4AAAAFD
debug1: ssh_exchange_identification: :4AAAAFD
debug1: ssh_exchange_identification: :4AAAAFD
debug1: ssh_exchange_identification: :4AAAAFD
debug1: ssh_exchange_identification: :4AAAAFD
debug1: ssh_exchange_identification: :4AAAAFD
debug1: ssh_exchange_identification: :4AAAAFD
debug1: ssh_exchange_identification: :4AAAAFD
debug1: ssh_exchange_identification: :4AAAAFD
debug1: ssh_exchange_identification: :4AAAAFD
debug1: ssh_exchange_identification: :4AAAAFD
debug1: ssh_exchange_identification: :4AAAAFD
debug1: ssh_exchange_identification: :4AAAAFD
debug1: ssh_exchange_identification: :4AAAAFD
debug1: ssh_exchange_identification: :4AAAA::::::::4::::::4:4:4
debug1: ssh_exchange_identification: PID 0xA043
debug1: ssh_exchange_identification: FW 123
debug1: ssh_exchange_identification: SER# HQ1533M2YXJ
debug1: ssh_exchange_identification: V 11900
debug1: ssh_exchange_identification: I -350
debug1: ssh_exchange_identification: VPV 11830
debug1: ssh_exchange_identification: PPV 0
debug1: ssh_exchange_identification: CS 0
debug1: ssh_exchange_identification: ERR 0
debug1: ssh_exchange_identification: LOAD ON
debug1: ssh_exchange_identification: IL 400
debug1: ssh_exchange_identification: H19 2
debug1: ssh_exchange_identification: H20 0
debug1: ssh_exchange_identification: H21 0
Autre exemple avec telnet :
telnet [url] 1000
Trying 222.222.222.32...
Connected to [url].
Escape character is '^]'.
ser2net port 1000 device /dev/serial1 [19200 N81] (MODEM 3.18.16)
PID 0xA043
FW 123
SER# HQ1533M2YXJ
V 11890
I -460
VPV 13230
PPV 0
CS 3
ERR 0
LOAD ON
IL 300
H19 2
H20 0
a+
Hors ligne
#13 Le 26/06/2017, à 12:44
- credenhill
Re : [RESOLU] Flux de données dans un terminal
en mettant les données dans des fichiers
$ awk 'BEGIN {print "V,I,LOAD,IL,H21"} $3 ~ /^V|^I|^LOAD|^IL/ {printf $4 ","} $3 ~ /^H21/ {print $4}' fichier_donnees_ssh
V,I,LOAD,IL,H21
11900,-350,11830,ON,400,0
$
$ awk 'BEGIN {print "V,I,LOAD,IL,H21"} /^V|^I|^LOAD|^IL/ {printf $2 ","} /^H21/ {print $2}' fichier_donnees_telnet
V,I,LOAD,IL,H21
11890,-460,13230,ON,300,$
Hors ligne
#14 Le 27/06/2017, à 10:13
- BenjiBoy
Re : [RESOLU] Flux de données dans un terminal
C'est là tout le problème : impossible de mettre ça dans un fichier compte tenu du fait que c'est un flux ininterrompu, j'ai l'impression que l'opération "ssh" ou l'opération "telnet" ne se termine jamais, et defait un ssh -v [truc] -p 1000 >> fichier.log ne rempli jamais rien car le terminal ne va pas jusqu'à lire ">> fichier.log".
Je sais pas si c'est clair mon affaire ?
Merci pour l'aide en tout cas.
a+
Hors ligne
#15 Le 27/06/2017, à 11:36
- credenhill
Re : [RESOLU] Flux de données dans un terminal
ssh -v mon_url.machin.fr -p 1000 2>&1 | awk '{print}'
affiche quelque chose ?
Hors ligne
#16 Le 27/06/2017, à 12:49
- BenjiBoy
Re : [RESOLU] Flux de données dans un terminal
Tout à fait là ça affiche quelque chose, et je peux remplir un fichier texte.
Idéalement, ça serait super que ça se voit direct à la commande avec un awk mais j'avoue que ça m'est un peu difficile ...
Mais déjà de pouvoir remplir un fichier c'est top.
Qu'en penses-tu ?
Hors ligne
#17 Le 27/06/2017, à 12:59
- BenjiBoy
Re : [RESOLU] Flux de données dans un terminal
Ca y est !
Grâce à la ligne que tu donnes plus haut, voici le résultat gagnant :
ssh -v [URL] -p 1000 2>&1 | awk -F " " 'BEGIN {print "V,I,VPV,LOAD,IL,H21"} $3 ~ /^V|^I|^LOAD|^IL/ {printf $4 ","} $3 ~ /^H21/ {print $4}'
Et mon résultat :
V,I,VPV,LOAD,IL,H21
11650,-370,13110,ON,300,1
11640,-490,12810,ON,400,1
11640,-370,13020,ON,400,1
11650,-370,12780,ON,300,1
Et je peux créer un fichier texte avec ces informations, ce qui est juste parfait.
Aller, poussons le bouchons un peut plus loin : à ton avis, est-ce que je peux avec une ligne de commande ,voir un mini script, faire en sorte que la commande plus haut attende d'avoir X lignes avant de s'arrêter ? Comme ça je la pose sur un crontab, et je suis encore plus content .
Et merci pour ton aide précieuse en tout cas.
Hors ligne
#18 Le 27/06/2017, à 13:04
- credenhill
Re : [RESOLU] Flux de données dans un terminal
c'est possible mais X lignes en entrée ou X lignes en sortie, affichées ?
Hors ligne
#19 Le 27/06/2017, à 13:06
- BenjiBoy
Re : [RESOLU] Flux de données dans un terminal
Sorties, affichées.
Genre le fichier ferait
V,I,VPV,LOAD,IL,H21
11650,-370,13110,ON,300,1
11640,-490,12810,ON,400,1
11640,-370,13020,ON,400,1
11650,-370,12780,ON,300,1
11650,-370,12780,ON,300,1
Et clos la requête (équivalent d'un crtl+C).
Hors ligne
#20 Le 27/06/2017, à 13:07
- BenjiBoy
Re : [RESOLU] Flux de données dans un terminal
Et à propos je rectifie un "> test.log" au bout de la fonction citée plus haut ne rempli pas un fichier même en rajoutant le "2>&1", mais j'ai du oublié un truc., pas grave.
Hors ligne
#21 Le 27/06/2017, à 13:30
- credenhill
Re : [RESOLU] Flux de données dans un terminal
modifier la ligne du post 17
par ex. 500 lignes
ssh -v [URL] -p 1000 2>&1 | awk -v max=500 'BEGIN {print "V,I,VPV,LOAD,IL,H21"} $3 ~ /^V|^I|^LOAD|^IL/ {printf $4 ","} $3 ~ /^H21/ {print $4; if(n++==max)exit}'
pas besoin de -F " "
Dernière modification par credenhill (Le 27/06/2017, à 13:31)
Hors ligne
#22 Le 27/06/2017, à 13:49
- BenjiBoy
Re : [RESOLU] Flux de données dans un terminal
En effet, le séparateur " " n'a aucune utilité.
Avec ta dernière commande, la récupération s'arrête effectivement à X ligne mais n'exit pas, elle freeze.
Hors ligne
#23 Le 27/06/2017, à 13:54
- BenjiBoy
Re : [RESOLU] Flux de données dans un terminal
A noter, on ne reprend la main qu'avec un ctrl+C en revanche en faisant ta commande + >> test.log
ssh -v [url] -p 1000 2>&1 | awk -v max=5 'BEGIN {print "V,I,VPV,LOAD,IL,H21"} $3 ~ /^V|^I|^LOAD|^IL/ {printf $4 ","} $3 ~ /^H21/ {print $4; if(n++==max)exit}' >>test.log
Ca rempli un fichier (et ça c'est la classe).
Je crois que j'avais fais un script qui trouve le process qu'il a lui même lancé et le kill après un wait, ça suffit peut-être ? (Mais c'est peut-être moche je suis instrumentaliste, pas informaticien )
Dernière modification par BenjiBoy (Le 27/06/2017, à 13:59)
Hors ligne
#24 Le 27/06/2017, à 23:03
- DonutMan75
Re : [RESOLU] Flux de données dans un terminal
Hello,
je n'ai pas vraiment de solution à apporter mais juste un petit bout de script permettant (je crois) de simuler le comportement en sortie du ssh.
#! /bin/sh
mkfifo toto
while $(true) ; do
echo "Checksum " > toto
echo "PID 0xA043" > toto
echo "FW 123" > toto
echo "SER# HQ1533B2M5J" > toto
echo "V 12660" > toto
echo "I -190" > toto
echo "VPV 0" > toto
echo "PPV 0" > toto
echo "CS 0" > toto
echo "ERR 0" > toto
echo "LOAD ON" > toto
echo "IL 200" > toto
echo "H19 0" > toto
echo "H20 0" > toto
echo "H21 221" > toto
echo "H22 0" > toto
echo "H23 0" > toto
echo "HSDS 0" > toto
sleep 1
done
De l'autre côté, il suffit de fait un tail -f pour voir arriver les fameuses trames.
$ tail -f toto
Curieusement le head semble fonctionner... AU bout d'un moment, la commande se termine et le fichier de log est correctement créé.
tail -f toto | head -10 > log
Bref, c'est pas super constructif mais ça peut peut-être aider à simuler ce qu'observe BenjiBoy.
Bonne soirée à tous,
Donut
Hors ligne
#25 Le 28/06/2017, à 00:00
- Watael
Re : [RESOLU] Flux de données dans un terminal
non, pas
while $(true)
, juste
while true
, ou
while :
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne