0

バックティックを使用してdf -lhコマンドを変数として保存$varすることができましたが、変数の各部分を別の変数に割り当てることができるように分割したいと思います。

印刷したときの出力は次の$varとおりです。

Filesystem     Size   Used  Avail Capacity  iused     ifree %iused  Mounted on
/dev/disk0s2  931Gi   82Gi  849Gi     9% 21503280 222477462    9%   /
/dev/disk1s2   19Gi  5.0Gi   14Gi    27%  1303373   3579438   27%   /Volumes/Install OS X Yosemite
/dev/disk1s3  1.8Ti  174Gi  1.6Ti    10% 45714072 437656799    9%   /Volumes/store

私が望むのは、ヘッダーの最初の行を削除してから、次のカテゴリに分割することです。

$filesystem, $size, $used, $avail, . $cap_$mounted

shift を使用して最初の行を削除しようとしましたが、これは配列専用であることがわかりました。私が持っている別の配列については、chompを使用します。

foreach my $line (@output) {
              chomp $line;
              my( $filesystem, $size, $used, $avail, $cap, $mounted ) = split (/\s+/, $line);
}

しかし、これは配列ではないため、システム出力を配列として保存する方法がない限り、どうすればよいかわかりませんか?

どうもありがとう。

4

3 に答える 3

1

ハッシュ スライス アプローチを使用するのはどうですか?

#!/usr/bin/env perl
use strict;
use warnings;

use Data::Dumper;

chomp ( my @header = split ' ', <DATA>, 9 ); 

my @rows; 
while ( <DATA> ) { 
   chomp; 
   my %this_row;
   push @rows, \%this_row;
   @this_row{@header} = split ' ', $_, 9; 
   print Dumper \%this_row;
}

print Dumper \@rows; 


foreach my $row ( @rows ) { 
   print $row -> {Filesystem}, " => ", $row -> {Size},"\n";
}


__DATA__
Filesystem     Size   Used  Avail Capacity  iused     ifree %iused  Mounted on
/dev/disk0s2  931Gi   82Gi  849Gi     9% 21503280 222477462    9%   /
/dev/disk1s2   19Gi  5.0Gi   14Gi    27%  1303373   3579438   27%   /Volumes/Install OS X Yosemite
/dev/disk1s3  1.8Ti  174Gi  1.6Ti    10% 45714072 437656799    9%   /Volumes/store

スペースが含まれているのは最後のフィールドだけのように見えるため、分割するカウントを指定します。(そうしないと、別の列が「オン」になり、それ'Install OS X Yosemite'も分割されます)。

これにより、次のようなデータ構造が構築されます。

$VAR1 = [
          {
            'Filesystem' => '/dev/disk0s2',
            'Mounted on' => '/',
            'Avail' => '849Gi',
            '%iused' => '9%',
            'Size' => '931Gi',
            'iused' => '21503280',
            'Capacity' => '9%',
            'Used' => '82Gi',
            'ifree' => '222477462'
          },
          {
            'Capacity' => '27%',
            'iused' => '1303373',
            'Size' => '19Gi',
            '%iused' => '27%',
            'Filesystem' => '/dev/disk1s2',
            'Mounted on' => '/Volumes/Install OS X Yosemite',
            'Avail' => '14Gi',
            'ifree' => '3579438',
            'Used' => '5.0Gi'
          },
          {
            'ifree' => '437656799',
            'Used' => '174Gi',
            'Capacity' => '10%',
            'iused' => '45714072',
            '%iused' => '9%',
            'Size' => '1.8Ti',
            'Avail' => '1.6Ti',
            'Mounted on' => '/Volumes/store',
            'Filesystem' => '/dev/disk1s3'
          }
        ];

これはハッシュの配列です。(たとえば、各値は「キー化」されています)。

splitただし、代わりに値を配列に入れるだけで、同様のことを行うことができます。

于 2016-05-19T09:55:10.513 に答える