1

我有多个文件,其中包含以下两个条目:

$ cat file_01
Total capacity                   3.4 TB
Capacity used                    825.8 GB

文件的输出是两行。第一行是总容量,第二行是已用容量。

这是一台服务器的输出,我希望它为我的其余服务器合并。

我想创建一个简单的脚本,它将添加来自多个文件的所有总容量和所有使用的容量,并提供一个合并的输出。Shell 或 perl 是我正在寻找的。

对此的任何方向,都会非常有帮助。

谢谢

4

4 回答 4

1

假设所有文件都以 TB 报告(未经测试)

perl -lane '
    $total += $F[2]; $used += $F[6]; 
    END {print "total: $total; used: $used"}
' file*

如果您有不同的单位,请考虑使用诸如Math::Units 之类的东西在 TB 和 GB 之间进行转换。

于 2012-11-05T16:16:15.100 回答
1

假设 1TB = 1000GB:

cat file* |  perl -ne '
   /.* (\d+.\d+) ([TG])B .* (\d+.\d+) ([TG])B/;
   $x+=$1*($2==T?1000:1);
   $y+=$3*($4==T?1000:1);
   END{print "$x GB, $y GB\n"}'
于 2012-11-05T15:24:55.537 回答
0

读取并加载每种类型 GB、TB 等的哈希表。

cat file? | perl -ne '
chomp;
@x = split(/\s+/,$_);
$total{$x[-1]} += $x[-2];
while(<>){
  chomp;
  @x = split(/\s+/,$_);
  $total{$x[-1]} += $x[-2];
};
for $m1 ( keys %total ) {
  print "$m1 , $total{$m1}\n";
};
'
于 2013-06-23T19:41:36.767 回答
0

下面应该做的伎俩:

awk '{ if ($4 == "GB") $3/=1000; s[FNR] += $3 } END { print "total: "s[1]" TB\nused:  "s[2]" TB" }' file_*

FNR - 文件中的行号

于 2013-06-23T19:24:46.320 回答