各種コマンドを実行するとスペースで整形された情報がターミナルに表示されます。
この出力をCSV(またはTSV)に変換する方法を記します。
タイトルにはファイルと記述してありますが、もちろん標準入出力を使った変換もできます。
下記の例はlsコマンドの出力結果をcsvに変換しています。
tr -s ' ' ','
$ ls -l /etc/init.d/ 合計 564 -rwxr-xr-x 1 root root 1897 7月 22 12:35 NetworkManager -rwxr-xr-x 1 root root 1566 1月 8 2010 acpid -rwxr-xr-x 1 root root 1441 3月 28 2007 anacron -rwxr-xr-x 1 root root 1429 3月 14 2007 apmd -rwxr-xr-x 1 root root 1284 1月 27 2010 atd -rwxr-xr-x 1 root root 3328 3月 6 2011 auditd <snip>
$ ls -l /etc/init.d/ | tr -s ' ' ',' 合計,564 -rwxr-xr-x,1,root,root,1897,7月,22,12:35,NetworkManager -rwxr-xr-x,1,root,root,1566,1月,8,2010,acpid -rwxr-xr-x,1,root,root,1441,3月,28,2007,anacron -rwxr-xr-x,1,root,root,1429,3月,14,2007,apmd -rwxr-xr-x,1,root,root,1284,1月,27,2010,atd -rwxr-xr-x,1,root,root,3328,3月,6,2011,auditd <snip>
man trをして-sのオプションの意味を貼りつけておきます。
-s, --squeeze-repeats 同じ文字の繰り返しを 1 文字に置き換える。この操作は変換や削除のあとに行われる。 SET1 にある文字の繰り 返しを、その文字 1 文字に置き換える。
カンマだったところを\tにするだけです。
tr -s ' ' '\t'
$ ls -l /etc/init.d/ | tr -s ' ' '\t' 合計 564 -rwxr-xr-x 1 root root 1897 7月 22 12:35 NetworkManager -rwxr-xr-x 1 root root 1566 1月 8 2010 acpid -rwxr-xr-x 1 root root 1441 3月 28 2007 anacron -rwxr-xr-x 1 root root 1429 3月 14 2007 apmd -rwxr-xr-x 1 root root 1284 1月 27 2010 atd -rwxr-xr-x 1 root root 3328 3月 6 2011 auditd <snip>
複数スペースが続き区切り文字になっている情報としてsarなどの出力があります。
trコマンドによりCSVに変換したり、TSVに変換することにより、EXCELやOOoのCalcなどで簡単にグラフにすることができます。
以下のコマンドを実行してシステム情報を取得します。
sar -A -o sysinfo.dat 1 10
(1秒おき計10回全ての情報を取得しsysinfo.datファイルに取得データを出力します。)
sarコマンドにより出力されたファイルを利用しCPU利用状況を取得します。
以下のように-uでCPU利用状況を指定した出力結果です。尚、LANG=Cにより出力を英語表記にしています。
(LANG=Cで英語表記にならないようであれば、LC_ALL=Cとしてみてください。)
$ LANG=C sar -u -f sysinfo.dat Linux 2.6.18-274.12.1.el5 (centos) 12/28/11 13:22:57 CPU %user %nice %system %iowait %steal %idle 13:22:58 all 0.00 0.00 0.50 1.00 0.00 98.51 13:22:59 all 8.50 0.00 0.50 0.00 0.00 91.00 13:23:00 all 1.00 0.00 0.00 0.00 0.00 99.00 13:23:01 all 1.50 0.00 0.50 0.00 0.00 98.00 13:23:02 all 1.00 0.00 0.00 0.00 0.00 99.00 13:23:03 all 1.50 0.00 0.50 0.00 0.00 98.00 13:23:04 all 1.00 0.00 0.50 0.00 0.00 98.51 13:23:05 all 1.50 0.00 0.50 0.00 0.00 98.00 13:23:06 all 1.00 0.00 0.00 0.00 0.00 99.00 13:23:07 all 1.49 0.00 1.00 0.00 0.00 97.51 Average: all 1.85 0.00 0.40 0.10 0.00 97.65
trコマンドによりCSVに変換されました。
$ LANG=C sar -u -f sysinfo.dat | tr -s ' ' ',' Linux,2.6.18-274.12.1.el5,(centos), 12/28/11 13:22:57,CPU,%user,%nice,%system,%iowait,%steal,%idle 13:22:58,all,0.00,0.00,0.50,1.00,0.00,98.51 13:22:59,all,8.50,0.00,0.50,0.00,0.00,91.00 13:23:00,all,1.00,0.00,0.00,0.00,0.00,99.00 13:23:01,all,1.50,0.00,0.50,0.00,0.00,98.00 13:23:02,all,1.00,0.00,0.00,0.00,0.00,99.00 13:23:03,all,1.50,0.00,0.50,0.00,0.00,98.00 13:23:04,all,1.00,0.00,0.50,0.00,0.00,98.51 13:23:05,all,1.50,0.00,0.50,0.00,0.00,98.00 13:23:06,all,1.00,0.00,0.00,0.00,0.00,99.00 13:23:07,all,1.49,0.00,1.00,0.00,0.00,97.51 Average:,all,1.85,0.00,0.40,0.10,0.00,97.65
以下のようにファイルにリダイレクトすればファイルにも出力できます。
$ LANG=C sar -u -f sysinfo.dat | tr -s ' ' ',' > cpu.csv
先頭の2行が不要であれば、以下のようにすればよいでしょう。
$ LANG=C sar -u -f sysinfo.dat | tr -s ' ' ',' | tail -n +3