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

すべてが1行にあります。私の目標は、出力を列にまとめて読みやすくすることです。たとえば、次のようにします。

totalio readpercentage cachehitpercentage

75.00 20.0 93.0

これどうやってするの?

4

4 に答える 4

4

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

あなたが探していることをすべきです。必要に応じて、パターンに従って変数を追加するだけです。参考: printf

于 2012-11-10T16:48:58.933 に答える
1

これらの測定を数回行い、stdoutまたはログファイルに印刷する場合は特に、フォーマットを検討する必要があります。 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
于 2012-11-11T05:29:39.527 に答える
1

申し訳ありませんが、私はドアを出て歩いているところです。または、より良い例を挙げます。あなたが探しているものはformats. 詳しくは をご覧くださいperldoc perlform

于 2012-11-10T17:04:28.627 に答える
0

他のものの中には、便利でダンディなText::Tableもあります。

于 2012-11-11T00:53:01.493 に答える