Как извлечь определенные числа из файлов для решения уравнения?

У меня есть несколько файлов, которые похожи на это:

//   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;.

Как я могу достигнуть этого?

2
задан 2 August 2016 в 00:35

1 ответ

Можно использовать следующий жемчуг 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 и так далее

4
ответ дан 2 December 2019 в 02:18

Другие вопросы по тегам:

Похожие вопросы: