Publié le 6 Décembre 2012
J'aime bien gnuplot, il m'arrive de l'utiliser pour faire des analyse post-astreinte avec des graphs sur des (sys)logs. En general je awk/cut/count/grep pour finir avec un csv qu'un tableur classique pourrai ouvrir sauf s'il y a des millions de lignes.
L'astuce suivante est surtout pour gerer des timeseries.
Dans l'exemple suivant j'ai un fichier sous la forme suivante separée par des espace (a cause de uniq -c)
112 23:24
la premiere valeur est un count, la 2eme est sous la forme %H:%M (un coup de cut pour virer les minutes) avant d'avoir le nombre d'evenement par minute. Et on peut dire a gnuplot de traier du temps au lieu de valeur.
On specifie le time format :
gnuplot> set timefmt "%H:%M"
on indique que l'axe x sera des valeurs temporelles :
gnuplot> set xdata time
on indique le format de l'axe x (autrement il va bettement mettre 01/01 partout, pff)
gnuplot> set format x "%H:%M"
on veut un tics par heure (3600 secondes)
gnuplot> set xtics 3600
on specifique le separateur du csv :
gnuplot> set datafile separator " "
y'a plus qu'a grapher :
gnuplot> plot "foobar.csv" using 2:1 with line
2:1 au lieu de 1:2 parce que dans le fichier d'origine l'axe x est en 2eme "Y X" au lieu de l'habituel "X Y" si vous avez un fichier ou il y a une seule colonne vous pouvez indiquer que l'axe X (ou Y d'ailleurs mais c'est moins banal) est le N° de ligne
Dans ce cas la, par exemple on a un fichier sous la forme suivante :
12
42
11
y'a juste a faire :
gnuplot> plot "truc.whatever" using 0:1
dans gnuplot la colonne 0 est le N° de ligne.
Bah, simple et efficace, souvent pratique mais pas pour les timeseries (a moins de generer tres exactement une valeur toutes les minutes par exemple, mais autrement c'est un peu foireux)
Pour generer les fichiers a traiter par gnuplot, je conseille bien evidemment d'utiliser awk :)
Un autre truc qui peut etre sympa est de generer automatiquement des graphs en creant un fichier gnuplot.
Y'a juste a ecrire un header avec la config de gnuplot suivi d'un plot "-" ... puis les data terminées par "e"
Exemple :
ker2x@arthurus:~$ cat tuto.gnuplot
set term pngcairo
set output "tuto.png"
plot "-" using 0:1 with line
1
2
3
e
ker2x@arthurus:~$ gnuplot tuto.gnuplot
ker2x@arthurus:~$ file tuto.png
tuto.png: PNG image, 640 x 480, 8-bit/color RGBA, non-interlaced
Donc on peut faire un awk qui genere ca, en metant le header dans BEGIN { } (en incluant la ligne plot "-") les data dans le corps du fichier awk et "e" dans END {}
Voila voila, rien de sorcier, juste pratique, et puis j'oublie souvent les noms de commande gnuplot qui vont bien alors la au moins elles seront archivées quelque part :)