説明
仕事でCSVファイルのフォーマットを変換するスクリプトを書くことになりました。
こんなふうにすれば簡単かなとPerlの汎用的な設計を思い浮かべたのですが、
「だれでも読めるように書いてね。要するにPerlじゃなく普通のコマンドを並べて。」
と言われて断念(基本インフラ屋なもので)。
でもせっかくなのでこういう感じでやろうとした、というのをこっちにのせてみます。
今回はサーバのリソース情報を格納したCSVファイルを考えます。
1行目にヘッダ行、2行目以降がデータ行です。
元ファイルには時間、CPUアイドル率、メモリ、スワップ、ディスク使用量(MBtye)が並んでます。
TIME,CPU_Idle,Memory_Used,Swap_Used,Disk_Used
00:00,100,100,2000,1000
00:30,90,200,3000,1500
01:00,80,300,4000,2000
これを時間、CPU、メモリ、ディスク使用率を格納したCSVファイルに変換します。(メモリとディスクの容量は1G,10G)
TIME,CPU_Util,Memory_Util,Disk_Util
00:00,0,9.765625,9.765625
00:30,10,19.53125,14.6484375
01:00,20,29.296875,19.53125
変換テーブルとして1行目に新しいヘッダ行、2行目に変換式を並べたファイルを準備します。
TIME,CPU_Util,Memory_Util,Disk_Util
$TIME,100-$CPU_Idle, $Memory_Used/2**10*100, $Disk_Used/(10*2**10)*100
で、使いかたはこう。
$ ./conv_csv.pl conv_table < old.csv > new.csv
実際は複数ファイルを同時に読み込んで行の対応に2カラムをキーとする、けっこう複雑なデータ構造だったのですが、入力データ構造と変換テーブルさえ変えれば対応できるかなと。どちらにせよ今の書き方だとヘッダのカラム名にPerlの変数命名規則が適用されちゃうので苦しいですね。(CPU_UtilはいいがCPU-Utilは不可)
CSVファイルの扱いかたはテキトウなのでマネすると危ないです。
台北猫々さんの投稿やこのへんみておくと事故確率が減るやも。
http://blog.livedoor.jp/dankogai/archives/50765677.html
コメント
前へ 1 次へ![]()
コメントする
[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。
[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。





