У меня есть несколько файлов, которые похожи на это:
// 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
Я должен извлечь числа 32
и 8
и затем вычислите результат
sum=b * (0.004+(c * 0.00008));
где b=32
и c=4
.
Результат должен быть записан в файл как Result: sum;
.
Как я могу достигнуть этого?
Можно использовать следующий жемчуг 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 $!;
}
Это ищет входной файл строковые Биты и Мультиплексор, извлекает следующие числа и печатает результат уравнения ($sum=$b * (0.004+($c * 0.00008))
) к выходному файлу как Result: <number>;
. Выходной файл называют как input-file.result
.
Выполнение его на файле в качестве примера:
$ perl myscript.pl file.txt
found values in file.txt:
Bits: 32
Mux: 8
writing sum (0.14848) to the output file.txt.result
Содержание file.txt.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;
Если Вы хотите использовать сценарий с несколькими входными файлами, можно выполнить его как
perl myscript.pl file1 file2 file3 ...
Это затем создаст выходные файлы file1.result
, file2.result
и так далее