URL: https://linuxfr.org/forums/programmation-shell/posts/plomberie-unixienne Title: Plomberie unixienne Authors: Marotte ⛧ Date: 2017年02月27日T20:01:48+01:00 License: CC By-SA Tags: rrdtool, bash, awk, pipe et vmstat Score: 3 Bonjour, Je cherche à alimenter une base RRD avec la sortie de la commande _vmstat_ (sous Linux). J’ai créé ma base RRD et je peux l’alimenter manuellement, je n’ai pas de problème de ce côté là. La commande suivante me sort un enregistrement avec lequel je devrais pouvoir alimenter ma base, toutes les secondes. J’utilise le caractère nul comme séparateur, ce n’est probablement pas une nécessité dans mon cas (donnée RRD...) mais j’ai de toute façon le même comportement en utilisant `\n`... ``` vmstat -n 1 | awk '{ if (NR>3) { printf "%s", strftime("%s"); for (i=1; i<18; i++) { printf ":%i", $i; } ; printf "000円"; fflush(); } }' ``` Voici ce que sort la commande, en pipant dans `cat -v` pour qu’on voit le séparateur (`^@`) : ``` $ vmstat -n 1 | awk '{ if (NR>3) { printf "%s", strftime("%s"); for (i=1; i<18; i++) { printf ":%i", $i; } ; printf "000円"; fflush(); } }' |cat -v 1488221041:0:0:0:5445776:80776:999008:0:0:0:0:201:210:1:1:98:0:0^@1488221042:0:0:0:5444504:80776:999008:0:0:0:0:2268:4388:3:1:96:1:0^@1488221043:0:0:0:5444504:80776:999008:0:0:0:0:157:156:1:0:99:0:0^@1488221044:0:0:0:5444380:80776:999008:0:0:0:0:223:245:0:1:99:0:0^@1488221045:0:0:0:5444496:80776:999008:0:0:0:0:198:240:1:0:99:0:0^@1488221046:0:0:0:5444504:80780:999008:0:0:0:4:215:225:1:1:98:1:0^@^C ``` La commande tourne indéfiniment, ici je l’ai arrêté en faisant Ctrl+C Je veux maintenant mettre à jour ma base RRD. La commande de mise à jour est la suivante (ici je reprends une des mesures de l’exemple plus haut) : ``` rrdupdate fichier.rrd '1488221041:0:0:0:5445776:80776:999008:0:0:0:0:201:210:1:1:98:0:0' ``` Je m’oriente donc vers l’utilisation de xargs sur la première commande pour exécuter un rrdupdate (ie: rrdtool update) sur chacune des mesures. Et c’est là que j’ai un problème, c’est comme si xargs ne voyait rien : ``` $ vmstat -n 1 | awk '{ if (NR>3) { printf "%s", strftime("%s"); for (i=1; i<18; i++) { printf ":%i", $i; } ; printf "000円"; fflush(); } }' |xargs -0 ``` n’affiche rien. J’ai essayé d’ajouter `printf "%s\n"` mais c’est pareil... Pourtant si je prends un exemple plus simple d’utilisation de _xargs_ j’en déduis que ça devrait bien m’afficher les lignes que _vmstat_ me crache : ``` $ printf "787870001421454円00026455円000円" |xargs -0 printf "%s\n" 78787 1421454 26455 $ printf "787870001421454円00026455円000円" |xargs -0 78787 1421454 26455 ``` Je passe vraisemblablement à côté de quelque chose... Comment vous y prendriez-vous ?

AltStyle によって変換されたページ (->オリジナル) /