Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 wink.
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 wink)

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