LoginSignup
26
22

More than 5 years have passed since last update.

gnuplotとgrepの速攻グラフ作成

Last updated at Posted at 2017-06-18

今までグラフを描くときにIPythonばかり使っていたのですが、
「ログファイルから該当箇所だけ抜き出して即グラフ化して状況把握したい。3秒で!」ということが仕事上多くなってきました。
IPythonだと、IPython起動して、データファイルをオープンしてグラフ表示するまでに4,5行のコードが要りますよね。
gnuplotとgrepコマンドの組み合わせでもっとサクッとやる方法のメモです。
gnuplotのインストールは apt-get で問題ありません。

ここで使うデータファイル

適当なのが見つからなかったので、top > top.txt してしばらく放置したものをデータとします。
firefoxのCPU利用率とメモリ利用率をプロットすることにします。
以下のようなデータが一定時間分あるのが top.txt と思ってください。
Screenshot at 2017-06-18 12-24-41.png
grep で firefox のところだけ抜きだすとこんな感じ。
でもgrepしたものをいちいち別ファイルにするのは手間だからやりたくない。
Screenshot at 2017-06-18 12-31-54.png

プロット手順

基本的には以下のみです。
1. gnuplotの対話モードに入る(1行)
2. プロットする(1行)

gnuplot の対話モードに入る(1行)

terminal上で gnuplot と入力するのみです。IPythonで言うなら ipython -i と同じようなモードに入ります。
Screenshot at 2017-06-18 12-40-34.png

プロットする(1行)

plot '< grep firefox top.txt' using 10 w l

で以下のグラフが表示されます。

  • < はリダイレクト的なものです。 > は要らないので注意。' 'の中に直接Linuxコマンドが書けます。
  • using 10 の 10 はプロットする列です。using 1:2 などとすれば x軸に1列目、y軸に2列目でやってくれる。
  • w l は with line の意味です。w lp とやれば linepointsになる。

sample1.png

複数列プロットしたいならば、カンマで続けて書く。凡例は title で付けられます。

plot '< grep firefox top.txt' using 10 w lp title 'CPU', '< grep firefox top.txt' using 11 w l title 'MEMORY'

sample2.png

備考

対話モードに入らずとも、terminal上から直接やることも可能です。

terminal$ gnuplot -p -e 'plot "< grep firefox top.txt" using 10'

といった感じで。
オプションが要らず覚えやすいという意味でこの方法を記載しました。
私もgnuplot初心者なので、より良い方法があればご教示いただけると幸いです。

おわり

26
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
22