#navi(../)
* 複数スペースが区切り文字となっているファイルをCSVに変換する [#sbe987cc]
各種コマンドを実行するとスペースで整形された情報がターミナルに表示されます。~
この出力をCSV(またはTSV)に変換する方法を記します。
#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)
* trコマンドによるCSV変換 [#g8f24d85]
タイトルにはファイルと記述してありますが、もちろん標準入出力を使った変換もできます。~
下記の例はlsコマンドの出力結果をcsvに変換しています。
tr -s ' ' ','
- ls -l コマンドを実行
$ 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>
- trコマンドにより複数続くスペース区切りをカンマに変換(CSVに変換)
$ 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 文字に置き換える。
* TSV(タブ区切り)に変更する方法) [#d53eec55]
カンマだったところを\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>
* 当方がよく使う場面 [#m55b6275]
複数スペースが続き区切り文字になっている情報としてsarなどの出力があります。~
trコマンドによりCSVに変換したり、TSVに変換することにより、EXCELやOOoのCalcなどで簡単にグラフにすることができます。
** sarの出力をCSVにする [#o6575982]
以下のコマンドを実行してシステム情報を取得します。
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に変更 [#a67feaa1]
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
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)