2012-11-10 90 views
1

如何修改以下腳本以使其顯示在其相應的式柱的每個值: 腳本的體看起來像這樣:如何將輸出格式化爲列?

($vmdisk, $totalio, $readpercentage, $cachehitpercentage, $currentkbpersecond, 
    $maximumkbpersecond, $currentiopersecond, $maximumiopersecond 
) = split (",", $line); 
$totalio =~ s/\"//g; 
$readpercentage =~ s/\"//g; 
$cachehitpercentage =~ s/\"//g; 
$currentkbpersecond =~ s/\"//g; 
$maximumkbpersecond =~ s/\"//g; 
$currentiopersecond =~ s/\"//g; 
$maximumiopersecond =~ s/\"//g; 

print "totalio:$totalio readpercentage:$readpercentage cachehitpercentage:$cachehitpercentage currentkbpersecond:$currentkbpersecond maximumkbpersecond:$maximumkbpersecond currentiopersecond:$currentiopersecond maximumiopersecond:$maximumiopersecond"; 

這將顯示這種類型的格式化輸出的:

totalio:75.0 readpercentage:20.0 cachehitpercentage:93.3 currentkbpersecond:33.8 maximumkbpersecond:33.8 currentiopersecond:15.0 maximumiopersecond:15.0 

一切都在一條線上。我的目標是將輸出轉換爲列並使其更具可讀性。例如像這樣:

totalio readpercentage cachehitpercentage 

75.00 20.0 93.0 

我該怎麼做?

+0

我會去,至少,如果你是在定期做這份報告平移,用模板::工具包或HTML ::模板和輸出該報告爲HTML表格。 – jira

+0

yuck!使用Text :: CSV_XS解析您的輸入! – ikegami

+0

你的拆分方法似乎有點沉重......你能給我們你的*輸入*嗎?也許像'y |「|| d; @ array = split(」「)''... –

回答

1

如果您多次進行這些測量並打印到標準輸出或日誌文件,格式可能會特別考慮。 perldoc perlform

$line = "0.0,75.0,20.0,93.3,33.8,33.8,15.0,15.0"; 

($vmdisk, $totalio, $readpercentage, $cachehitpercentage, $currentkbpersecond, $maximumkbpersecond, $currentiopersecond, $maximumiopersecond) = split (",", $line); 

$totalio =~ s/\"//g; 
$readpercentage =~ s/\"//g; 
$cachehitpercentage =~ s/\"//g; 
$currentkbpersecond =~ s/\"//g; 
$maximumkbpersecond =~ s/\"//g; 
$currentiopersecond =~ s/\"//g; 
$maximumiopersecond =~ s/\"//g; 

format REPORT_HEADER = 
------------------------------------------------------------------------------------------------------- 
Total IO  Read %  Cache Hit %  Current kB/sec  Max kB/sec  Current IO/sec  Max IO/sec 
------------------------------------------------------------------------------------------------------- 
. 

format REPORT_BODY = 
@####.# @###.##   @###.##   @###.##  @###.##   @###.##  @###.## 
$totalio, $readpercentage, $cachehitpercentage, $currentkbpersecond, $maximumkbpersecond, $currentiopersecond, $maximumiopersecond 
. 

select(STDOUT); 

$~= "REPORT_HEADER"; 
write; 

$~= "REPORT_BODY"; 
write; 

會給你輸出像這樣:

------------------------------------------------------------------------------------------------------- 
Total IO  Read %  Cache Hit %  Current kB/sec  Mac kB/sec  Current IO/sec  Max IO/sec 
------------------------------------------------------------------------------------------------------- 
    75.0  20.00   93.30    33.80   33.80    15.00   15.00 
+0

這真是太棒了!我怎樣才能添加另一列?例如,我想添加時間作爲第一個字段$ time,$ readpercentage,.... – user1814718

4

printf "%-10s %-10s %-10s\n", $totalio, $readpercentage, $cachehitpercentage; 

應該做你要找的內容。只需根據需要添加變量即可。參考:printf

+0

真棒,很好地工作,謝謝! – user1814718

1

對不起,我只是走出門,或者我會舉一個更好的例子。你正在尋找的東西是formats。閱讀更多在perldoc perlform

+0

我聽說過[Perl6 :: Form](http://search.cpan。 org/perldoc?Perl6 :: Form)(Perl5類似於Perl6的表單)比內置表單更好, – ikegami