Você pode usar o seguinte perl script
:
#!/usr/bin/perl
use strict;
use warnings;
foreach my$file (@ARGV)
{
open(IN,'<',$file) or die $!;
open(OUT,'>',$file.".result") or die $!;
my$b;
my$c;
my$sum;
while(<IN>)
{
($b)=$_=~/(\d+)/ if $_=~/Bits/;
($c)=$_=~/(\d+)/ if $_=~/Mux/;
print OUT $_;
}
print STDERR "found values in ",$file,":\n";
print STDERR "Bits: ",$b,"\nMux: ",$c,"\n";
$sum=$b * (0.004+($c * 0.00008));
print STDERR "writing sum (",$sum,") to the output ",$file,".result\n";
print OUT "Result: ",$sum,";\n";
close OUT or die $!;
close IN or die $!;
}
Ele procura no arquivo de entrada pelas cadeias Bits e Mux , extrai os números a seguir e imprime o resultado da equação ( $sum=$b * (0.004+($c * 0.00008))
) no arquivo de saída como %código%. O arquivo de saída é nomeado como Result: <number>;
.
Executando no seu arquivo de exemplo:
$ perl myscript.pl file.txt
found values in file.txt:
Bits: 32
Mux: 8
writing sum (0.14848) to the output file.txt.result
O conteúdo de input-file.result
:
// copyright kkshlglkf
// lhafslghldk
// rsghlgsrlskl
// sgkg
// sgrjgrs
// Memory: BDRAM_SP
// Bits: 32
// Mux: 8
// ladhdal: sdj
// zdfjhael: apfiehad
slhgslfkghlkj
slgdhlgfdkkdf
Dataoutstage: None;
TransparentMode: None;
CellName: BDRAM_SP;
MemoryTemplate(BDRAM_SP)
{
afljefkaf
aslhkldfjfa
fihhfejksgj
dfhdhsgjshgf
zdkjjgshgf
sjfhfjkh
sfdkjssjfh
Result: 0.14848;
Se você quiser usar o script com vários arquivos de entrada, poderá executá-lo como
perl myscript.pl file1 file2 file3 ...
Isso criará os arquivos de saída file.txt.result
, file1.result
e assim por diante