【问题标题】:Swapping columns in specific blocks交换特定块中的列
【发布时间】:2016-01-01 03:06:38
【问题描述】:

希望大家新年快乐!

我正在尝试交换文件特定块中的 2 列。文件格式为:

Startpoint: in11 (input port)
Endpoint: out421 (output port)
Path Group: (none)
Path Type: max

Point                                    Incr       Path
---------------------------------------------------------------
input external delay                     0.00       0.00 r
in11 (in)                                0.00       0.00 r
Ckt432/A[7] (TopLevel432b)               0.00       0.00 r
Ckt432/M1/A[7] (PriorityA)               0.00       0.00 r
Ckt432/M1/U7/Y (INVX1_RVT)               0.03       0.03 f
Ckt432/M5/U12/Y (OA21X1_RVT)             0.10       2.44 r
Ckt432/M5/Chan[3] (DecodeChan)           0.00       2.44 r
Ckt432/Chan[3] (TopLevel432b)            0.00       2.44 r
out421 (out)                             0.00       2.44 r
data arrival time                                   2.44
---------------------------------------------------------------
(Path is unconstrained)

Startpoint: in37 (input port)
Endpoint: out421 (output port)
Path Group: (none)
Path Type: max

Point                                    Incr       Path
---------------------------------------------------------------
input external delay                     0.00       0.00 r
in37 (in)                                0.00       0.00 r
Ckt432/A[5] (TopLevel432b)               0.00       0.00 r
Ckt432/M1/A[5] (PriorityA)               0.00       0.00 r
Ckt432/M1/U8/Y (INVX1_RVT)               0.03       0.03 f
Ckt432/M1/U13/Y (NAND2X0_RVT)            0.06       0.10 r
Ckt432/M5/U12/Y (OA21X1_RVT)             0.10       2.44 r
Ckt432/M5/Chan[3] (DecodeChan)           0.00       2.44 r
Ckt432/Chan[3] (TopLevel432b)            0.00       2.44 r
out421 (out)                             0.00       2.44 r
data arrival time                                   2.44
---------------------------------------------------------------
(Path is unconstrained)

我正在尝试

  1. 将第 5 列替换为第 2 列。如果第 5 列中的字母是 r,则将替换为 v。如果第 5 列中的字母是 f,则将替换为 ^

  2. 在第一列中插入两个双引号。

  3. 将第三列替换为;

  4. 将第 4 列替换为 //

这应该只在定义开始和结束行的块中完成 - input external delaydata arrival time

此外,我想用预定义的文本更改块之前/之后的文本。

我的预期输出应该是:

$path {
  // from: in11
  // to: out432
  $name "test_1" ;
  $cycle 1 ;
  $slack -0.130978 ;
  $transition {
 "in11"  v  ; //  (in)
 "Ckt432/A[7]"  v  ; //  (TopLevel432b)
 "Ckt432/M1/A[7]"  v  ; //  (PriorityA)
 "Ckt432/M1/U7/Y"  ^  ; //  (INVX1_RVT)
 "Ckt432/M5/U12/Y"  v  ; //  (OA21X1_RVT)
 "Ckt432/M5/Chan[3]"  v  ; //  (DecodeChan)
 "Ckt432/Chan[3]"  v  ; //  (TopLevel432b)
 "out421"  v  ; //  (out)
  }
}

$path {
  // from: in11
  // to: out432
  $name "test_2" ;
  $cycle 1 ;
  $slack -0.130978 ;
  $transition {
  "in37"  v  ; //  (in)
  "Ckt432/A[5]"  v  ; //  (TopLevel432b)
  "Ckt432/M1/A[5]"  v  ; //  (PriorityA)
  "Ckt432/M1/U8/Y"  ^  ; //  (INVX1_RVT)
  "Ckt432/M1/U13/Y"  v  ; //  (NAND2X0_RVT)
  "Ckt432/M5/U12/Y"  v  ; //  (OA21X1_RVT)
  "Ckt432/M5/Chan[3] "  v  ; //  (DecodeChan)
  "Ckt432/Chan[3] "  v  ; //  (TopLevel432b)
  "out421"  v  ; //  (out)
  }
}

目前,我可以交换列,但我不知道如何仅在块中使用它们。我的代码是:

awk ' { c1 = $1; c2 = $2; $1 = " \" "; $2 = c1; $3 = " \" "; $4 = $5; $5 = " ; // "; $6 = c2; print; } ' file1.txt

任何帮助将不胜感激。

【问题讨论】:

  • 第五列是哪一列?我只在表格中看到 3 列

标签: awk swap


【解决方案1】:

awk 来救援!

我们一步一步实现,先提取感兴趣的数据

$ awk '/data arrival time/{f=0} f; /input external delay/{f=1}' file

  in11 (in)                                0.00       0.00 r
  Ckt432/A[7] (TopLevel432b)               0.00       0.00 r
  Ckt432/M1/A[7] (PriorityA)               0.00       0.00 r
  Ckt432/M1/U7/Y (INVX1_RVT)               0.03       0.03 f
  Ckt432/M5/U12/Y (OA21X1_RVT)             0.10       2.44 r
  Ckt432/M5/Chan[3] (DecodeChan)           0.00       2.44 r
  Ckt432/Chan[3] (TopLevel432b)            0.00       2.44 r
  out421 (out)                             0.00       2.44 r
  in37 (in)                                0.00       0.00 r
  Ckt432/A[5] (TopLevel432b)               0.00       0.00 r
  Ckt432/M1/A[5] (PriorityA)               0.00       0.00 r
  Ckt432/M1/U8/Y (INVX1_RVT)               0.03       0.03 f
  Ckt432/M1/U13/Y (NAND2X0_RVT)            0.06       0.10 r
  Ckt432/M5/U12/Y (OA21X1_RVT)             0.10       2.44 r
  Ckt432/M5/Chan[3] (DecodeChan)           0.00       2.44 r
  Ckt432/Chan[3] (TopLevel432b)            0.00       2.44 r
  out421 (out)                             0.00       2.44 r

添加列替换、单独部分等

$ awk '/data arrival time/{f=0;print""}
             f{sub("r","v",$5);
               sub("f","^",$5);
               print $1,$5 " ; // " $2 }
    /input external delay/{f=1}' file

in11 v ; // (in)
Ckt432/A[7] v ; // (TopLevel432b)
Ckt432/M1/A[7] v ; // (PriorityA)
Ckt432/M1/U7/Y ^ ; // (INVX1_RVT)
Ckt432/M5/U12/Y v ; // (OA21X1_RVT)
Ckt432/M5/Chan[3] v ; // (DecodeChan)
Ckt432/Chan[3] v ; // (TopLevel432b)
out421 v ; // (out)

in37 v ; // (in)
Ckt432/A[5] v ; // (TopLevel432b)
Ckt432/M1/A[5] v ; // (PriorityA)
Ckt432/M1/U8/Y ^ ; // (INVX1_RVT)
Ckt432/M1/U13/Y v ; // (NAND2X0_RVT)
Ckt432/M5/U12/Y v ; // (OA21X1_RVT)
Ckt432/M5/Chan[3] v ; // (DecodeChan)
Ckt432/Chan[3] v ; // (TopLevel432b)
out421 v ; // (out)

现在,捕获输入、输出并将引号添加到第一个字段

$ awk -v q="\"" '/Startpoint:/{input=$2}
                   /Endpoint:/{output=$2}
           /data arrival time/{f=0;print""}
                             f{sub("r","v",$5);
                               sub("f","^",$5);
                               print q $1 q, $5 " ; // " $2 }
        /input external delay/{f=1; print input; print output}' file

in11
out421
"in11" v ; // (in)
"Ckt432/A[7]" v ; // (TopLevel432b)
"Ckt432/M1/A[7]" v ; // (PriorityA)
"Ckt432/M1/U7/Y" ^ ; // (INVX1_RVT)
"Ckt432/M5/U12/Y" v ; // (OA21X1_RVT)
"Ckt432/M5/Chan[3]" v ; // (DecodeChan)
"Ckt432/Chan[3]" v ; // (TopLevel432b)
"out421" v ; // (out)

in37
out421
"in37" v ; // (in)
"Ckt432/A[5]" v ; // (TopLevel432b)
"Ckt432/M1/A[5]" v ; // (PriorityA)
"Ckt432/M1/U8/Y" ^ ; // (INVX1_RVT)
"Ckt432/M1/U13/Y" v ; // (NAND2X0_RVT)
"Ckt432/M5/U12/Y" v ; // (OA21X1_RVT)
"Ckt432/M5/Chan[3]" v ; // (DecodeChan)
"Ckt432/Chan[3]" v ; // (TopLevel432b)
"out421" v ; // (out)

等等。我想您可以根据模板在数据周围添加静态值...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-01
    • 2020-03-07
    • 1970-01-01
    • 2019-01-05
    • 2015-11-17
    • 2014-09-11
    • 2018-08-10
    • 1970-01-01
    相关资源
    最近更新 更多