| Works
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が入っていない環境が多くなりましたね~。