PerlでCSVファイルの変換
mikeda
mikeda
ATOMRSS
  • ソースコードID: 615
  • 登録日時: 2008/09/07 21:54
  • 最終更新日時: 2008/09/07 21:54
  • アクセス数: 540
  • タグ:  perl csv 変換
  • codeなにがしブックマークに追加する 0 users
  • このページを del.icio.us に追加
  • このページをはてなブックマークに追加
  • GoodJob
  • 0

説明

仕事で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]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。

ゲスト投稿者:ゲスト:

PDFLib | A library for processing PDF on the fly プレゼン公開・共有サイト handsOut.jp オープンタイプ株式会社 チーム・マイナス6% - みんなで止めよう温暖化

ソースコードのブログパーツ

デフォルトのフォントサイズ
修飾
表示サイズ
px px
プレビュー (表示する)
下のプレビュー領域をクリックすると、ポップアップで全体を見ることができます。
パラメータが不正です

    GoodJobしたユーザ

    ブックマークコメント

    関連するなにがし

    前へ 1 次へ

    タグ

    dyndnsbytearrayinputstreamobjectinputstreambytearrayoutputstreamobjectoutputstreamディープコピーdeepcopyarraylistiteratorチェックボックス複数multibytexencentos文字エンコーディングinit_connectcharacter-set-servercollation-serverdefault-character-setf:label動的メソッド呼び出しヘルパーメソッドwsse2重登録防止prototype.js位置positionpositionedoffsetscrolltoスクロールlink_tocyclecheck_box_tagチュートリアルactive_formerror_messages_forハイライトバリデーションvalidate便利リストデコレーションメールデコメ非対応機種tilestext_field_tag一括複数情報etherealrtphexテキストデータ抽出validwhenリセット一括更新plop置換replacepcoslogmixisregソケットnet::telnetfopenmutexサンプルcalendar[linux][bash][シェルスクリプト][大容量]mobilerorrails2.1clipboardクリップボード横向きピラミッドs2jdbc-genjsonicお絵かきフルパス名抽出サブドメインサブドメイン名s2jdbc自動生成エンティティドコモxhtmlrestdoltengspidering背景変更グラデーションiso一括登録xトークンチェックevalmonitorslavereplication画像処理

    前へ 1 2 3 ... 8 次へ