URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

CSVファイルの行と列を入れ替えるPerlスクリプト

 タイトル以外の何ものでもありません。
 元々はVMware ESX/ESXiの"esxtop"コマンドの結果を整形する過程で作ったものだったりします。

 "esxtop -b"を実行すると列数が非常に多いCSVファイルが出力されます(Excelで開くと全部表示できないくらい)。
 しかも先頭の一行にオブジェクト名が並んでいるので、そのままでは"grep"による絞り込みもできなと。
 そんなこともあって作ったスクリプトでしたが、"esxtop"以外にも結構いろんな場面で役に立ってくれました。

#!/usr/bin/perl -w my (@tmpline, @tmplist); my ($numline, $tmpnum) = (0, 0); my ($i, $j, $k, $l) = (0, 0, 0, 0); while(<>){ $tmpline[$i] = $_; $i++; } while($j <= $#tmpline){ $tmplist[$j] = valcut($tmpline[$j]); $j++; } foreach $_(@tmplist){ $tmpline = $#{$_}; if($numline < $tmpline){ $numline = $tmpline; } } while($k <= $numline){ while($l <= $#tmplist){ if(defined ${$tmplist[$l]}[$k]){ print "${$tmplist[$l]}[$k]"; } if($l != $#tmplist){ print ","; } $l++; } print "\n"; $l = 0; $k++ } sub valcut{ my @tgtval = split(/,/, $_[0]); chomp(@tgtval); return(\@tgtval); }

 実行方法は"cat sample.csv | ./ch_l2c.pl"とかパイプで渡すだけです。結果を保存する場合はリダイレクトで。

 かなり昔に使ったものですが、最近も使ったので置いておきます。
 そういえば、最近はPerlが入っていない環境が多くなりましたね~。


        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

プロフィール

1020@管理人

都内を彷徨っているインフラエンジニアとかいう雑用係。いつだって眠い…。

最近のつぶやき

@umkn1020 (10/19-12:50)
ちょっとタイトルの付け方がどうかとは思う。 : Apple、布を発売 1枚1980円 - ITmedia NEWS https://t.co/YYAMcTDSke
@umkn1020 (10/19-10:26)
寒い…
@umkn1020 (10/18-19:45)
RT @yuroyoro: 障害の原因: ヒューマンエラー 再発防止策: ヒューマンを絶滅
@umkn1020 (10/16-12:24)
現在地は"Saitama Pref." ( https://t.co/45TObVydMm )
@umkn1020 (10/15-18:04)
移動に疲れた…

エントリーリスト

カテゴリーリスト

タグ