Awk 两个文件之间的插值

Awk 两个文件之间的插值,awk,interpolation,Awk,Interpolation,我一直很感激你的帮助。我是一名电气工程师。我正在使用一种工具对电路进行时序分析。我想对两个不同电压(0.945V和0.78V)的计时报告的结果进行插值。如果电压降低,则数据到达时间增加 比如说,, 在0.945V时,数据到达时间为0.70 0.78V时,数据到达时间为0.72 我想知道数据到达时间达到0.714时的电压,使用线性插值 在这种情况下,我可以计算 (0.78-0.945)/(0.72-0.70)0.714+(0.945-0.70(0.78-0.945)/(0.72-0.70)) 电压

我一直很感激你的帮助。我是一名电气工程师。我正在使用一种工具对电路进行时序分析。我想对两个不同电压(0.945V和0.78V)的计时报告的结果进行插值。如果电压降低,则数据到达时间增加

比如说,, 在0.945V时,数据到达时间为0.70 0.78V时,数据到达时间为0.72

我想知道数据到达时间达到0.714时的电压,使用线性插值

在这种情况下,我可以计算 (0.78-0.945)/(0.72-0.70)0.714+(0.945-0.70(0.78-0.945)/(0.72-0.70))

电压信息如0.78、0.945和目标数据到达时间0.714是固定的。但是,0.945V和0.78V下的数据到达时间会发生变化

还有一个要求。如果0.945V的数据到达时间高于0.714,则输出为0.714

0p945.rpt_in:

  Startpoint: dtu_inst_d[23]
               (input port)
  Endpoint: ifu_exu_aluop_d[0]
               (output port)
  Path Group: (none)
  Path Type: max

  Point                                           Incr       Path
  ----------------------------------------------------------------------
  input external delay                            0.00       0.00 f
  dtu_inst_d[23] (in)                             0.00       0.00 f
  U533/Y (INVX16_LVT)                             0.52       0.52 r
  U739/Y (AND4X1_LVT)                             0.07       0.58 r
  U572/Y (NAND4X0_LVT)                            0.05       0.64 f
  U607/Y (INVX0_LVT)                              0.04       0.68 r
  U609/Y (AO221X1_LVT)                            0.02       0.70 r
  ifu_exu_aluop_d[0] (out)                        0.00       0.70 r
  data arrival time                                          0.70
  ----------------------------------------------------------------------
  (Path is unconstrained)


  Startpoint: dtu_inst_d[21]
               (input port)
  Endpoint: imsk_ff_q_reg_0_
               (rising edge-triggered flip-flop clocked by rclk)
  Path Group: (none)
  Path Type: max

  Point                                           Incr       Path
  ----------------------------------------------------------------------
  input external delay                            0.00       0.00 f
  dtu_inst_d[21] (in)                             0.00       0.00 f
  U613/Y (INVX8_LVT)                              0.44       0.44 r
  U702/Y (XOR2X1_LVT)                             0.08       0.52 r
  U984/Y (NAND4X0_LVT)                            0.04       0.56 f
  U604/Y (OR3X1_LVT)                              0.05       0.61 f
  U605/Y (AO22X1_LVT)                             0.04       0.65 f
  U986/Y (NOR4X1_LVT)                             0.06       0.71 r
  imsk_ff_q_reg_0_/D (DFFX1_LVT)                  0.02       0.73 r
  data arrival time                                          0.73
  ----------------------------------------------------------------------
  (Path is unconstrained)
.
.
.
0p78.rpt_in:

  Startpoint: dtu_inst_d[23]
               (input port)
  Endpoint: ifu_exu_aluop_d[0]
               (output port)
  Path Group: (none)
  Path Type: max

  Point                                           Incr       Path
  ----------------------------------------------------------------------
  input external delay                            0.00       0.00 f
  dtu_inst_d[23] (in)                             0.00       0.00 f
  U533/Y (INVX16_LVT)                             0.52       0.52 r
  U739/Y (AND4X1_LVT)                             0.07       0.58 r
  U572/Y (NAND4X0_LVT)                            0.05       0.64 f
  U607/Y (INVX0_LVT)                              0.04       0.68 r
  U609/Y (AO221X1_LVT)                            0.05       0.72 r
  ifu_exu_aluop_d[0] (out)                        0.00       0.72 r
  data arrival time                                          0.72
  ----------------------------------------------------------------------
  (Path is unconstrained)


  Startpoint: dtu_inst_d[21]
               (input port)
  Endpoint: imsk_ff_q_reg_0_
               (rising edge-triggered flip-flop clocked by rclk)
  Path Group: (none)
  Path Type: max

  Point                                           Incr       Path
  ----------------------------------------------------------------------
  input external delay                            0.00       0.00 f
  dtu_inst_d[21] (in)                             0.00       0.00 f
  U613/Y (INVX8_LVT)                              0.44       0.44 r
  U702/Y (XOR2X1_LVT)                             0.08       0.52 r
  U984/Y (NAND4X0_LVT)                            0.04       0.56 f
  U604/Y (OR3X1_LVT)                              0.05       0.61 f
  U605/Y (AO22X1_LVT)                             0.04       0.65 f
  U986/Y (NOR4X1_LVT)                             0.06       0.71 r
  imsk_ff_q_reg_0_/D (DFFX1_LVT)                  0.05       0.76 r
  data arrival time                                          0.76
  ----------------------------------------------------------------------
  (Path is unconstrained)
.
.
.
Output.rpt_in需要:

Startpoint: dtu_inst_d[23]
               (input port)
  Endpoint: ifu_exu_aluop_d[0]
               (output port)
  Path Group: (none)
  Path Type: max

  Point                                           Incr       Path
  ----------------------------------------------------------------------
  input external delay                            0.00       0.00 f
  dtu_inst_d[23] (in)                             0.00       0.00 f
  U533/Y (INVX16_LVT)                             0.52       0.52 r
  U739/Y (AND4X1_LVT)                             0.07       0.58 r
  U572/Y (NAND4X0_LVT)                            0.05       0.64 f
  U607/Y (INVX0_LVT)                              0.04       0.68 r
  U609/Y (AO221X1_LVT)                            0.05       0.72 r
  ifu_exu_aluop_d[0] (out)                        0.00       0.72 r
  data arrival time                                          0.8295
  ----------------------------------------------------------------------
  (Path is unconstrained)


  Startpoint: dtu_inst_d[21]
               (input port)
  Endpoint: imsk_ff_q_reg_0_
               (rising edge-triggered flip-flop clocked by rclk)
  Path Group: (none)
  Path Type: max

  Point                                           Incr       Path
  ----------------------------------------------------------------------
  input external delay                            0.00       0.00 f
  dtu_inst_d[21] (in)                             0.00       0.00 f
  U613/Y (INVX8_LVT)                              0.44       0.44 r
  U702/Y (XOR2X1_LVT)                             0.08       0.52 r
  U984/Y (NAND4X0_LVT)                            0.04       0.56 f
  U604/Y (OR3X1_LVT)                              0.05       0.61 f
  U605/Y (AO22X1_LVT)                             0.04       0.65 f
  U986/Y (NOR4X1_LVT)                             0.06       0.71 r
  imsk_ff_q_reg_0_/D (DFFX1_LVT)                  0.05       0.76 r
  data arrival time                                          0.714
  ----------------------------------------------------------------------
  (Path is unconstrained)
.
.
.
每个文件中有1000多个路径。 我想awk可以做到,但我不知道怎么做。感谢您的帮助。提前谢谢


Jaeyoung

小心点,你在混合时间和电压!0.714是时间,0.8295是电压

awk -v time=0.714 '
FNR==1 {
i_file++;
V[i_file] = gensub(/0p([0-9]+)\.rpt_in/, "\\1", "g", FILENAME)}

FNR==NR && /data arrival time/ {i_time_1++; time_1[i_time_1] = $4}

FNR!=NR && /data arrival time/ {i_time_2++; time_2[i_time_2] = $4;
$4 = TO_BE_MODIFIED}

FNR!=NR {print $0}' 0p945.rpt_in 0p78.rpt_in
首先,您可以将时间存储为变量
-v

然后您可以使用
FILENAME
上的
gensub
提取电压
V
[0-9]+
然后,对于第一个文件
FNR==NR
,以及第二个文件
FNR,将
数据到达时间
作为第四列变量
$4
=NR
直接更改插值时间
$4
,并打印每行
$0


为了提高可读性,我允许您添加
if
条件来修改插值时间
$4
,以获得更高的时间。始终使用
i\u time\u 2
,因为您当前正在读取第二个文件。

小心,您正在混合时间和电压!0.714是时间,0.8295是电压

awk -v time=0.714 '
FNR==1 {
i_file++;
V[i_file] = gensub(/0p([0-9]+)\.rpt_in/, "\\1", "g", FILENAME)}

FNR==NR && /data arrival time/ {i_time_1++; time_1[i_time_1] = $4}

FNR!=NR && /data arrival time/ {i_time_2++; time_2[i_time_2] = $4;
$4 = TO_BE_MODIFIED}

FNR!=NR {print $0}' 0p945.rpt_in 0p78.rpt_in
首先,您可以将时间存储为变量
-v

然后您可以使用
FILENAME
上的
gensub
提取电压
V
[0-9]+
然后,对于第一个文件
FNR==NR
,以及第二个文件
FNR,将
数据到达时间
作为第四列变量
$4
=NR
直接更改插值时间
$4
,并打印每行
$0


为了提高可读性,我允许您添加
if
条件来修改插值时间
$4
,以获得更高的时间。始终使用
i\u time\u 2
,因为您当前正在读取第二个文件。

是的,awk非常灵活,可能会工作。可以编辑Q并包含更小的数据示例吗?正如帖子所说,你的Q更像是一个咨询规范。祝你好运。当你盖房子的时候,让你的邻居借一把锤子是合理的。当你坐下来看报纸的时候,把计划交给他们,让他们为你盖房子是不合理的。编辑你的帖子,提出一个合理的问题,帮助你解决问题。谢谢,邻居们。是的,awk非常灵活,可能有用。可以编辑Q并包含更小的数据示例吗?正如帖子所说,你的Q更像是一个咨询规范。祝你好运。当你盖房子的时候,让你的邻居借一把锤子是合理的。当你坐下来看报纸的时候,把计划交给他们,让他们为你盖房子是不合理的。编辑你的帖子,提出一个合理的问题,帮助你解决问题。谢谢,邻居们。谢谢你们的密码。我通过修改您的代码找到了一个代码。awk-v time=0.714'FNR==1{i_文件++;v[i_文件]=gensub(/0p([0-9]+)\.rpt_in/,“\\1”,“g”,FILENAME)}FNR==NR&&/data-arrival-time/{i_时间1++;time_1[i_时间1]=4}FNR=NR和/数据到达时间/{i_时间_2++时间_2[i_时间_2]=$4;$4=-0.165/(时间_2[i_时间_2]-时间_1[i_时间_2])*0.714+(0.945-时间_1[i_时间_2]*-0.165/(时间_2[i_时间_2]-时间_1[i_时间_2])FNR=NR{print$0}'0p945.rpt_noio2 0p78.rpt_noio2欢迎您。请用``格式化您的代码,编辑您的答案,以供进一步阅读。谢谢您的代码。我通过修改您的代码找到了一个代码。awk-v time=0.714'FNR==1{i_文件++;v[i_文件]=gensub(/0p([0-9]+)\.rpt_in/,“\\1”,“g”,FILENAME)}FNR==NR&&/data-arrival-time/{i_时间1++;time_1[i_时间1]=4}FNR=NR和/数据到达时间/{i_时间_2++时间_2[i_时间_2]=$4;$4=-0.165/(时间_2[i_时间_2]-时间_1[i_时间_2])*0.714+(0.945-时间_1[i_时间_2]*-0.165/(时间_2[i_时间_2]-时间_1[i_时间_2])FNR=NR{print$0}'0p945.rpt_noio2 0p78.rpt_noio2欢迎您。请用“`格式化您的代码,编辑您的答案,以供进一步阅读。