对表格结果进行计算并以表格形式打印结果

对表格结果进行计算并以表格形式打印结果

我有一份报告,其中显示时钟周期以及时钟名称和占空比。现在,我想使用tclorawkperl使其显示时钟周期的频率和占空比的百分比 (%)。哪种方法最好?我该怎么做?

****************************************
Report : clock
Design : abc
Version: some version
Date   : xxx
****************************************

Attributes:
    p - Propagated clock
    G - Generated  clock
    I - Inactive   clock

Clock             Period          Waveform            Attrs     Sources
-----------------------------------------------------------------------
axi_ACLK          1.2500          {0.0000 0.6250}               {axi_ACLK}
xyz
                  1.2500          {0.0000 0.6250}     G         {abc/xyz}

我希望输出显示如下(请注意 xyz 周期位于下一行):

Clock             Period          Waveform            Attrs     Sources
-----------------------------------------------------------------------

axi_ACLK          800          50%               {axi_ACLK}
xyz
                  800          50%    G         {abc/xyz}

谢谢拉维

答案1

使用 GNU grep、GNU awk,我为您的问题提出了一个基本且快速但肮脏的解决方案。假设所有虚线之后没有空行,并且时钟报告总是发生在所有虚线之后,并且只有一条这样的线。

正如评论中所讨论的,句点也以 ns 为单位。

$ pt_rpt="your_primetime_report_name";

$ fws="$(< "$pt_rpt" grep -m1 -B1 -E '^-+$' | head -n1 | grep -oP '\S+(?:\s+|$)' | awk '{print length()}' | paste -s)" \
awk '
  BEGIN {
    FIELDWIDTHS = ENVIRON["fws"]
    OFS = ""
  }
  /^-+$/,0 {
    if ( /^-+$/ ) { print prev }
    else {
      ### frequency calculation
      Tper = $2+0
      freq = sprintf("%-*s", length($2), sprintf("%g", 1e3/Tper))
      $2 = freq
      ### duty cycle determination
      Ton = $3; sub(/[[:space:]]+$/, "", Ton)
      nf = split(Ton, a, /[}[:space:]]/)
      Ton = a[nf-1]
      D = sprintf("%-*s", length($3), sprintf("%g%%", 1e2*Ton/Tper))
      $3 = D
    }
    print; next
  }
  { prev = $0 }
'  < "$pt_rpt"

输出:

Clock             Period          Waveform            Attrs     Sources
-----------------------------------------------------------------------
axi_ACLK          800             50%                           {axi_AC
xyz               800             50%                 G         {abc/xy

相关内容