このエントリーをはてなブックマークに追加


複数スペースが区切り文字となっているファイルをCSVに変換する

各種コマンドを実行するとスペースで整形された情報がターミナルに表示されます。
この出力をCSV(またはTSV)に変換する方法を記します。


trコマンドによるCSV変換

タイトルにはファイルと記述してありますが、もちろん標準入出力を使った変換もできます。
下記の例は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(タブ区切り)に変更する方法)

カンマだったところを\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の出力をCSVにする

以下のコマンドを実行してシステム情報を取得します。

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に変更

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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-06-27 (土) 22:04:33