用于在多个文件中添加数字的代码

时间:2012-11-05 14:56:37

标签: perl shell

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

$ cat file_01
Total capacity                   3.4 TB
Capacity used                    825.8 GB

文件输出是两行。第一行具有总容量,第二行是容量使用。

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

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

任何方向,都会非常有用。

由于

4 个答案:

答案 0 :(得分: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"}'

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

下面应该做的诀窍:

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

FNR - 文件中的行号

答案 3 :(得分: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";
};
'